Board logo

标题: [文本处理] FOR命令中一些符号的特殊关系 [打印本页]

作者: cjiabing    时间: 2011-4-15 00:59     标题: FOR命令中一些符号的特殊关系

本帖最后由 cjiabing 于 2011-4-15 01:04 编辑

以前似乎在这里发过,但找了半天没找到,见namejm 问到一个类似的问题,我再发一次,大大们给个解释吧!~



用批处理命令for读取字符串,当它遇到英文状态下的分号与问号,等号与星号时,字符串的显示就会发生一些改变,下面具体看看。
  1. 第一:分号与问号的关系:
  2. @echo off
  3. echo 分号在前,问号在后,显示分号前的内容。
  4. For %%a in (我喜欢;涟漪版?连连看) do echo %%a
  5. echo.
  6. pause>nul
  7. echo 问号在前,分号在后,显示分号后面的内容。
  8. For %%a in (我不会?让伤心的泪;挂满你的脸) do echo %%a
  9. echo.
  10. pause>nul
  11. echo 只有分号,分行显示分号前后的内容。
  12. For %%a in (曾梦想仗;剑走天涯) do echo %%a
  13. echo.
  14. pause>nul
  15. echo 只有问号,显示错误,但不会自动退出。
  16. For %%a in (年少的心?总有些轻狂) do echo %%a
  17. pause
复制代码
第二:等号与星号的关系:
  1. @echo off
  2. echo 等号在前,星号在后,显示等号前的内容。
  3. For %%a in (人生=若只如*初见) do echo %%a
  4. echo.
  5. pause>nul
  6. echo 星号在前,等号在后,显示等号后面的内容。
  7. For %%a in (何事*秋风悲=画扇) do echo %%a
  8. echo.
  9. pause>nul
  10. echo 只有等号,分行显示等号前后的内容。
  11. For %%a in (等闲变却=故人心) do echo %%a
  12. echo.
  13. pause>nul
  14. echo 只有星号,显示错误,但不会自动退出。
  15. For %%a in (却道故人*心易变) do echo %%a
  16. Pause
复制代码
以上分号与问号的关系,与等号与星号的关系是一样的。其中分号和等号起到了默认分隔的作用,而问号和星号起到了忽略的作用。巧妙使用这些关系能够制造一些混乱和提取一些有用信息。
        补充:
        有次对网页内容进行编辑,发现一个无法读取的问题,经分析如下:
  1.         1、for %%a in ( 我爱,北京?天安门) do echo %%a
  2.         2、for %%a in ( 我爱,北京天安门) do echo %%a
复制代码
上例无法显示,下例可以正常显示。由此可知,英文状态下的问号在隐藏字符串时起了关键作用,具体原理有待分析。
作者: hanyeguxing    时间: 2011-4-15 01:14

本帖最后由 hanyeguxing 于 2011-4-15 01:19 编辑

1# cjiabing
  1. for %%a in ( 我爱,北京?天安门) do echo %%a
  2. for %%a in ( 我爱,北京天安门) do echo %%a
复制代码
for的语法,引自:C:\WINDOWS\Help\ntcmds.chm::/for.htm
显示一组文件
set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令时,set 中的第一个值代替 %variable 或 %%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。
作者: lllsoslll    时间: 2011-4-15 09:50

以前似乎在这里发过,但找了半天没找到,见namejm 问到一个类似的问题,我再发一次,大大们给个解释吧!~



用批处理命令for读取字符串,当它遇到英文状态下的分号与问号,等号与星号时,字符串的显示就会发生 ...
cjiabing 发表于 2011-4-15 12:59 AM



这个教程和你写的那个什么断章,不是一个水准啊,楼主真身?
作者: cjiabing    时间: 2011-4-15 13:04

3# lllsoslll
呵呵,是本人写的,献丑了!~俺文科的,对计算机不懂多少,向你学习!~
作者: cjiabing    时间: 2011-4-15 13:41

1# cjiabing
最近比较喜欢for,发现它在处理文件时非常得心应手。在for中获取一组文件这个我很少用到,谢谢指点!~

“以上分号与问号的关系,与等号与星号的关系是一样的。其中分号和等号起到了默认分隔的作用,而问号和星号起到了忽略的作用。”
分号、问号、星号、等号,它们各自的意义我们是了解的,但在FOR中组合使用时的运行机制如何呢?
比如分号与问号,当它们一起使用时,以问号为中间,躲在分号后面的字符串被保留下来了,但在前面的则被忽略了,为何它们被忽略了呢?
是不是在预处理时,系统用分号作为分隔符,自动将问号前后分隔符之间的字符串设定为一个系统内部的变量了?
好比:我喜欢;涟漪版?连连看
结果只显示:我喜欢
其中问号之前的“涟漪版”和之后的“连连看”被处理成一个内部变量%var%,使得“涟漪版?连连看”变成“%var%?%str%”。
这个语句预处理结果:
字符串“我喜欢”——分隔符“分号”——匹配变量“涟漪版”——通配符“?”——匹配变量件“连连看”
作者: lllsoslll    时间: 2011-4-15 21:57

cmd 下粘贴如下代码试试
  1. @if not exist 涟漪版@连连看 @cd>涟漪版@连连看
  2. For %a in (我喜欢;涟漪版?连连看) do @echo %a
  3. @if not exist 涟漪版#连连看 @md 涟漪版#连连看
  4. For /d %a in (我喜欢;涟漪版?连连看) do @echo %a
复制代码

作者: hanyeguxing    时间: 2011-4-15 22:07

本帖最后由 hanyeguxing 于 2011-4-15 22:09 编辑

5# cjiabing


在2楼不是告诉你在这里?是通配符了吗?只要它是通配就不会拆分字符串




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2