DOS批处理脚本与for循环和pipe道

我想所有的文件名不包含单词“摘要”的目录中的CSV文件。 在命令提示符下,我可以input以下命令

dir /b my_dir\*.csv | find /V "summary"

当我尝试将上述命令转换为batch file时,遇到了一个问题,那就是for循环中不支持pipe命令。 那是我不能做到以下几点

 FOR /f %%A in ('dir /b my_dir\*.csv | find /V "summary"') do ( rem want to do something here ) 

有人能告诉我如何解决上面的问题吗?

提前致谢!

Solutions Collecting From Web of "DOS批处理脚本与for循环和pipe道"

你需要逃避| 字符以防止在解析循环命令时被解释。 使用^来转义它:

 FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| find /V "summary"') do ( rem do what you want with %%A here ) 

一旦逃脱, | 成为'有限的字符串'一部分。 当字符串根据语法作为“子命令”与循环分开时,它只被解释为特殊符号。 这是解析循环完成的。

如果你遇到了Gilbeg发现“/ V:没有这样的文件或目录”的问题,那么很有可能你的路径中有cygwin或类似的文件,批处理文件没有使用Windows查找命令。 如果您修改脚本以使用Windows查找的绝对路径,则错误将消失:

 FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| %SYSTEMROOT%\system32\find.exe /V "summary"') do ( rem want to do something here with %%A ) 

看看Windows PowerShell。 不是我自己曾经使用它,心灵。