在批处理脚本的for循环中重定向命令的输出

Posted

技术标签:

【中文标题】在批处理脚本的for循环中重定向命令的输出【英文标题】:Redirect output of command in for loop of batch script 【发布时间】:2013-06-11 09:20:57 【问题描述】:
...
for /F %%F in ('dir /B %* 2> nul') do (
...

我在这里尝试做的是丢弃命令的错误输出(并遍历 stdout 输出)。但是,它抱怨:

2> was unexpected at this time.

这是实现这一目标的某种方式吗?

【问题讨论】:

【参考方案1】:

在这种情况下,您需要像这样对 > 进行转义

for /F %%F in ('dir /B %* 2^> nul') do (

【讨论】:

微软使用实习生来实现命令外壳,我们的余生都必须忍受它...... 拯救了我的一天,古吉斯伯格先生 :)。我想补充一点:如果你想将stderr重定向到stdout,使用2>&1,你也需要转义&。【参考方案2】:

我相信您需要在“2”和“>”之间有一个分隔空间。没有那个分隔符,我的 dir 测试输出仍然显示在屏幕上。此外,我相信通过将 dir 命令的输出发送到 null 不会为集合提供任何数据来处理。

【讨论】:

没有。将2> 更改为2 > 将重定向STDOUT 而不是STDERR,从而阻止处理实际目录列表。正如@RGuggisberg 正确指出的那样,重定向运算符必须在嵌套命令中进行转义。

以上是关于在批处理脚本的for循环中重定向命令的输出的主要内容,如果未能解决你的问题,请参考以下文章

保持`for / f`重定向输出/在命令期间发生`do()`

处理用户输入与显示数据------------(禁止命令输出lsof命令关闭文件描述符创建读取/写入文件描述符)

为啥将命令输出定向到变量在批处理文件中不起作用

将输出重定向到for循环shell中特定目录中的多个文件

使用 FOR /F 'MSYS' 命令的 Cmd.exe 批处理脚本颜色输出

for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口