如果你打开一个命令提示符并input:
echo foobar > nul
它将不会打印任何东西,因为nul
吞下所有的input。 但是,如果您使用PowerShell运行该命令:
powershell "echo foobar" > nul
它会输出foobar
到控制台。 为什么是这样,我能做些什么来解决它?
编辑: 这是$PSVersionTable
的输出。 看起来我正在使用PowerShell v5.0。
注意:我假设你正在从cmd.exe中调用你的命令,而不是在PowerShell中,这与我所看到的症状是一致的。
你偶然发现PS(PowerShell)v5中的一个bug ( v3中不存在;对这个问题的评论表明它也不在v4中),尽管我不完全理解为什么PS会被指责,因为我期望cmd.exe
来处理重定向。
我可能会错过一些东西,所以请让我知道。
PowerShell 应该发送所谓的成功流 – 默认情况下输出的东西,包括echo
,这是Write-Output
的别名 – 到外部世界的标准输出 。
在较老的PS版本中>NUL
确实有效地抑制了PowerShell的输出。
奇怪的是, v5中的bug只影响NUL
,而重定向到实际的文件。
至于解决方法 :
如果您的代码与v2兼容 ,请尝试以下操作:
powershell -version 2 "echo foobar" > NUL
否则, 重定向到一个实际的文件,然后删除该文件:
powershell "echo foobar" > "%TEMP%\NUL-bug-workaround" & del "%TEMP%\NUL-bug-workaround"