标题: [文本处理] FOR命令中一些符号的特殊关系 [打印本页]
作者: cjiabing 时间: 2011-4-15 00:59 标题: FOR命令中一些符号的特殊关系
本帖最后由 cjiabing 于 2011-4-15 01:04 编辑
以前似乎在这里发过,但找了半天没找到,见namejm 问到一个类似的问题,我再发一次,大大们给个解释吧!~
用批处理命令for读取字符串,当它遇到英文状态下的分号与问号,等号与星号时,字符串的显示就会发生一些改变,下面具体看看。- 第一:分号与问号的关系:
- @echo off
- echo 分号在前,问号在后,显示分号前的内容。
- For %%a in (我喜欢;涟漪版?连连看) do echo %%a
- echo.
- pause>nul
- echo 问号在前,分号在后,显示分号后面的内容。
- For %%a in (我不会?让伤心的泪;挂满你的脸) do echo %%a
- echo.
- pause>nul
- echo 只有分号,分行显示分号前后的内容。
- For %%a in (曾梦想仗;剑走天涯) do echo %%a
- echo.
- pause>nul
- echo 只有问号,显示错误,但不会自动退出。
- For %%a in (年少的心?总有些轻狂) do echo %%a
- pause
复制代码
第二:等号与星号的关系:- @echo off
- echo 等号在前,星号在后,显示等号前的内容。
- For %%a in (人生=若只如*初见) do echo %%a
- echo.
- pause>nul
- echo 星号在前,等号在后,显示等号后面的内容。
- For %%a in (何事*秋风悲=画扇) do echo %%a
- echo.
- pause>nul
- echo 只有等号,分行显示等号前后的内容。
- For %%a in (等闲变却=故人心) do echo %%a
- echo.
- pause>nul
- echo 只有星号,显示错误,但不会自动退出。
- For %%a in (却道故人*心易变) do echo %%a
- Pause
复制代码
以上分号与问号的关系,与等号与星号的关系是一样的。其中分号和等号起到了默认分隔的作用,而问号和星号起到了忽略的作用。巧妙使用这些关系能够制造一些混乱和提取一些有用信息。
补充:
有次对网页内容进行编辑,发现一个无法读取的问题,经分析如下:- 1、for %%a in ( 我爱,北京?天安门) do echo %%a
- 2、for %%a in ( 我爱,北京天安门) do echo %%a
复制代码
上例无法显示,下例可以正常显示。由此可知,英文状态下的问号在隐藏字符串时起了关键作用,具体原理有待分析。
作者: hanyeguxing 时间: 2011-4-15 01:14
本帖最后由 hanyeguxing 于 2011-4-15 01:19 编辑
1# cjiabing - for %%a in ( 我爱,北京?天安门) do echo %%a
- 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 下粘贴如下代码试试- @if not exist 涟漪版@连连看 @cd>涟漪版@连连看
- For %a in (我喜欢;涟漪版?连连看) do @echo %a
- @if not exist 涟漪版#连连看 @md 涟漪版#连连看
- For /d %a in (我喜欢;涟漪版?连连看) do @echo %a
复制代码
作者: hanyeguxing 时间: 2011-4-15 22:07
本帖最后由 hanyeguxing 于 2011-4-15 22:09 编辑
5# cjiabing
在2楼不是告诉你在这里?是通配符了吗?只要它是通配就不会拆分字符串
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |