windows - 批处理脚本 : Why doesn't redirecting stdout work in this scenario?

标签 windows powershell batch-file cmd command-prompt

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

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/

相关文章:

json - 转换JSON文件时出现“Invalid JSON primitive”错误

javascript - 将Powershell对象传递给Node.JS/Electron并将其 package 在HTML标记中

powershell - 将带引号的参数从批处理文件传递给 `powershell start` - 按需 self 提升

c++ - 操作系统原生 2D API 与 OpenGL

Jenkins Pipeline 中的 PowerShell 环境变量给出 `org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME`

image - 如何使用批处理文件将随机图像从文件夹复制到其他文件夹?

.net - 创建批处理文件来检查 .net Framework 3.5 sp1 是否安装

python - 在 Windows 上安装 curses .whl 包

windows - 设备驱动程序 IRQL 和线程/上下文切换

c# - Reg-Free COM "Microsoft.Windows.ActCtx"是否适用于脚本 - 后期绑定(bind)?