有没有人知道如何让一个以上的角色成为" 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.
答案 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