windows - 带有 for 循环和管道的批处理脚本

标签 windows batch-file for-loop cmd io-redirection

我想要目录中的所有 csv 文件,其文件名不包含单词“summary”。在命令提示符中,我可以键入以下命令

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

当我尝试将上述命令传输到批处理文件时,我遇到了一个问题,因为 for 循环不支持管道命令。那就是我不能做以下事情

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

有人可以告诉我如何解决上述问题吗?

提前致谢!

最佳答案

您需要对 | 字符进行转义,以防止在解析循环命令 时对其进行解释。使用 ^ 对其进行转义:

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

一旦转义,| 就成为 ' 分隔字符串的一部分。根据语法,当该字符串与循环分开解析时,它仅被解释为特殊符号,作为“子命令”。这是在 解析循环之后完成的。

关于windows - 带有 for 循环和管道的批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6026773/

相关文章:

windows - 批量删除小于一定大小的文件

c++ - 使用 VIM 对 "cpp"文件进行批量文件重新格式化

c++ - 强制编译器推出 for 循环的可能性

Java 数组列表元素

c++ - 嵌入 luajit undefined reference

ruby - 编译 Ruby C 扩展时如何静态链接外部库

windows - 如何记录批处理文件中删除了多少数据

r - 如何在从股票代码列表中检索雅虎财经数据的 For 循环中进行错误处理

python - 安装 Python 2.7.8(64 位)而不替换现有的 Python27 安装

python - 我们如何在 Linux 中使用 sleep() 来保持合理的 CPU 使用率,同时仍然具有良好的计时精度?