|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
|
2007-1-25 05:33 |
|
|
9527
银牌会员
努力做坏人
积分 1185
发帖 438
注册 2006-8-28 来自 北京
状态 离线
|
『第
2 楼』:
首先我想说的是FOR语句默认是忽略以“分号”开头的行,而不是冒号。
其次for /f "eol= delims=" %%a in (xxx) do command 命令中不会忽略任何符号开头的行,也就是说会显示全部的内容........
|
我今后在论坛的目标就是做个超级坏人!!! |
|
2007-1-25 05:42 |
|
|
lzmyst
新手上路
积分 19
发帖 10
注册 2005-12-13
状态 离线
|
『第
3 楼』:
几乎所有教程都说delims要放在最后,今天才知道也是有陷阱的。
|
|
2007-1-25 05:46 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
4 楼』:
又一个值得注意的地方, 不能说是陷阱, 任何程序自然不能顾及所有方面, 这就得靠我们平时多留意了.
|
业精于勤而荒于嬉,形成于思而毁于随。 |
|
2007-1-25 05:51 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by 9527 at 2007-1-24 16:42:
首先我想说的是FOR语句默认是忽略以“分号”开头的行,而不是冒号。 |
|
呵呵,多谢提醒,笔误已经修正。
Quote: | 其次for /f "eol= delims=" %%a in (xxx) do command 命令中不会忽略任何符号开头的行,也就是说会显示全部的内容........ |
|
这个方案会忽略掉以空格打头的行,兄弟测试一下就知道了。
Quote: | Originally posted by pengfei at 2007-1-24 16:51:
又一个值得注意的地方, 不能说是陷阱, 任何程序自然不能顾及所有方面, 这就得靠我们平时多留意了. |
|
这些值得注意的地方,在微软的使用手册里没有任何地方提及,究竟是它刻意忽略的bug还是问题太小而不屑于提及异或是没有察觉到,已经无从得知,但是从使用者的角度来说,有bug的地方却没有正式的说明,无异于是一个个隐藏着的陷阱等着别人往里跳^_^
[ Last edited by namejm on 2007-1-24 at 05:59 PM ]
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-1-25 05:54 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
6 楼』:
"delims= eol=" 顺序不能颠倒
for /?上不是这样的啊
|
|
2007-1-25 08:22 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
7 楼』:
哈哈,for /? 里还说:eol=c -指一个行注释字符的结尾(就一个) 。我狂吐血ing——嘿嘿,实际上是过滤掉以 c 打头的行,不知是哪个家伙翻译的,E文也太差了点吧?
言归正传,我所说的顺序不能颠倒,并不是指所有的情形,而是说为了能同时处理以分号和冒号打头的行内容,这个顺序不能颠倒。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-1-25 08:31 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by namejm at 2007-1-25 08:31:
哈哈,for /? 里还说:eol=c -指一个行注释字符的结尾(就一个) 。我狂吐血ing——嘿嘿,实际上是过滤掉以 c 打头的行,不知是哪个家伙翻译的,E ... |
|
汗,才发现for /?有这么大个超级错误,狂晕中
|
|
2007-1-25 08:43 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
9 楼』:
for /f "eol= delims=" %%i in (test.txt) do echo %%i "eol= delims=" 不能颠倒, 本机测试没有发现错误.
看来for /?的注释真的有点问题啊.
eol=c - 指一个行注释字符的结尾(就一个)
delims=xxx - 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
上面的说明我们在理解时产生了歧义, eol是过滤与行首字符匹配的行. 就像delims默认的分隔符为空格或TAB. 而eol的默认过滤的行首字符为;号, 而for /?却没有说明.
namejm兄说明给出的解决代码, for /f "delims= eol=" %%i in (test.txt) do echo %%i 它的作用和"delims=" 一样是取消默认空格作为分隔符, 而"eol="是取消;作分隔符.
下面代码为过滤行首为冒号的行, 同时取消了默认的分号分隔符.
@echo off
for /f "delims= eol=: " %%i in (test.txt) do echo %%i
pause test.txt
abc
:123
4:56
;
;def
::
dok:cto::: elo分隔符只能为一个, 上面代码故意让elo有两个分隔符, 可是只过滤了行首为:号的行, 而空格行却没有过滤.
|
业精于勤而荒于嬉,形成于思而毁于随。 |
|
2007-1-25 09:24 |
|
|
hxmupdata
初级用户
积分 76
发帖 39
注册 2007-3-9
状态 离线
|
『第
10 楼』:
看个帖要花半个小时,,,不愧是经典帖..............................
|
狐狸喜欢狡猾。。 |
|
2007-3-14 22:30 |
|
|
wudixin96
银牌会员
积分 1928
发帖 931
注册 2007-1-6
状态 离线
|
『第
11 楼』:
下面代码为过滤行首为冒号的行, 同时取消了默认的分号分隔符.
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
for /f "delims= eol=: " %%i in (test.txt) do echo %%i
pause
应该是
下面代码为过滤行首为冒号的行, 同时取消了默认的空格和跳格键分隔符.
|
|
2007-4-4 01:07 |
|
|
ccuu668
初级用户
积分 57
发帖 29
注册 2006-12-27
状态 离线
|
『第
12 楼』:
看来只有多多学习学习基础的东西了.看的不彻底.
|
|
2007-5-2 15:32 |
|
|
luowei14
初级用户
积分 193
发帖 98
注册 2007-1-17
状态 离线
|
『第
13 楼』:
。。。呵。。microsoft还有这个BUG啊。。。晕晕
|
这家伙很聪明 什么都没留下 |
|
2007-8-15 17:27 |
|
|
knoppix7
银牌会员
积分 1287
发帖 634
注册 2007-5-2 来自 cmd.exe
状态 离线
|
『第
14 楼』:
set /?里的BUG更多。。。
|
|
2007-8-15 22:04 |
|
|
dai13910
新手上路
积分 10
发帖 5
注册 2007-12-27
状态 离线
|
|
2008-1-11 14:39 |
|