DOS FOR循环中可以有多个EOL字符吗?

时间:2014-09-16 20:37:21

标签: batch-file for-loop

有没有人知道如何让一个以上的角色成为" eol" DOS批处理脚本中的字符。我想同时使用';'和'#'作为评论一条线的字符。

type t.txt
this is a line
#this is a commented line
;is this a commented line
last line

for /f "usebackq tokens=* eol=; eol=#" %f in (`type t.txt`) do (echo "%f")
"this is a line"
";is this a commented line"
"last line"

for /f "usebackq tokens=* eol=;#" %f in (`type t.txt`) do (echo "%f")
#" was unexpected at this time.

2 个答案:

答案 0 :(得分:2)

你可以在内部嵌套for循环来定义另一个eol:

for /f "usebackq eol=; delims=" %%f in (`type t.txt`) do (
    for /f "eol=# delims=" %%Z in ("%%~f")  do echo %%Z
)

但作为一个命令行,它可能是一个很长的表达......

令我惊讶的是cmd.exe并没有抱怨第一个例子中的两个eol定义,尽管它只采用了第一个。另一种方法是使用FINDSTR过滤结果:

for /f  "usebackq delims=" %%f in (`type t.txt^| findstr /i /b /v "; #"`) do ( echo %%f )

或从命令行:

for /f  "usebackq delims=" %f in (`type type.txt^| findstr /i /b /v "; #"`) do ( echo %f )

也可以在FOR循环内使用很少的IF条件,但这需要延迟扩展,并且在命令行中使用不太方便。

答案 1 :(得分:1)

这个命令单独解决了这个问题:

findstr /V /B "# ;" t.txt