批处理脚本:为什么不在这种情况下重定向stdout工作?

时间:2016-02-21 21:43:15

标签: windows powershell batch-file cmd command-prompt

如果打开命令提示符并输入:

echo foobar > nul

它不会打印任何内容,因为nul吞下了它的所有输入。但是如果你使用PowerShell运行命令:

powershell "echo foobar" > nul

它会将foobar输出到控制台。为什么这样,我该怎么做才能解决它?

修改 Here$PSVersionTable的输出。看起来我正在使用PowerShell v5.0。

1 个答案:

答案 0 :(得分:5)

注意:我假设您从 cmd.exe 调用命令,而不是从PowerShell中调用命令,这与症状I' m一致看到。 功能

您在PS(PowerShell)v5 中偶然发现错误(在v3中没有出现;对此问题的评论表明它也是虽然我不完全理解为什么 PS 应该受到责备,因为我不希望cmd.exe处理重定向。 但是,我可能会遗漏一些东西,所以请告诉我。

PowerShell 应该发送其所谓的成功流 - 默认输出的内容,包括echo,这是Write-Output的别名 - 外部世界&#39 ; s 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"