如果您打开命令提示符并输入:
echo foobar > nul
它不会打印任何东西,因为 nul
吞掉了它的所有输入。但是,如果您使用 PowerShell 运行命令:
powershell "echo foobar" > nul
它将输出 foobar
到控制台。为什么会这样,我该如何解决?
编辑: Here是 $PSVersionTable
的输出。看起来我使用的是 PowerShell v5.0。
最佳答案
注意:我假设您是从 cmd.exe 调用您的命令,而不是从 PowerShell 中调用命令,这与我看到的症状一致。
我认为您在 PS (PowerShell) v5 中偶然发现了一个错误(在 v3 中不存在;对该问题的评论表明它也不在 v4 中),尽管如此我不完全理解为什么 PS 是罪魁祸首,因为我希望 cmd.exe
来处理重定向。
不过,我可能遗漏了什么,所以请告诉我。
PowerShell 应该 发送其所谓的成功流 - 默认情况下输出的内容,包括 echo
,它是 Write-Output
的别名> - 到外部世界的stdout。
在旧的 PS 版本中,>NUL
确实有效地抑制了 PowerShell 的输出。
奇怪的是,v5 中的错误仅影响 NUL
,而重定向到实际 文件有效。
至于解决方法:
如果您的代码与 v2 兼容,试试这个:
powershell -version 2 "echo foobar" > NUL
否则,重定向到实际文件,然后删除该文件:
powershell "echo foobar" > "%TEMP%\NUL-bug-workaround" & del "%TEMP%\NUL-bug-workaround"
关于windows - 批处理脚本 : Why doesn't redirecting stdout work in this scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542490/