加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:25:46 所属栏目:Windows 来源:网络整理
导读:如果打开命令提示符并键入以下内容: echo foobar nul 它将不会打印任何内容,因为nul吞下了它的所有输入.但是如果您使用PowerShell运行该命令: powershell "echo foobar" nul 它会将foobar输出到控制台.为什么会这样,我该怎么做才能解决它? 编辑:Here是$P
如果打开命令提示符并键入以下内容:

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的别名 – 外部世界的标准输出.

在较旧的PS版本中> NUL确实有效地抑制了PowerShell的输出.
奇怪的是,v5中的错误只影响NUL,而重定向到实际文件则有效.

至于解决方法:

如果您的代码与v2兼容,请尝试以下操作:

powershell -version 2 "echo foobar" > NUL

否则,重定向到实际文件并在之后删除该文件:

powershell "echo foobar" > "%TEMP%NUL-bug-workaround" & del "%TEMP%NUL-bug-workaround"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读