xp系统c 语言命令重定向,将Windows cmd标准输出和stderr重定向到单个文件

我正在尝试将DOS命令的所有输出(stdout + stderr)重定向到单个文件:

C:\>dir 1> a.txt 2> a.txt

The process cannot access the file because it is being used by another process.

是可能的,还是应该重定向到两个单独的文件?

#1楼

你要:

dir > a.txt 2>&1

语法2>&1将2 (stderr)重定向到1 (stdout)。 您还可以通过重定向到NUL来隐藏消息, MSDN上有更多解释和示例 。

#2楼

我刚刚发布了@Anders刚刚发布的答案,但是......

您可能想阅读>>和| (管)也是。

#3楼

Anders Lindahl的回答是正确的,但是应该注意的是,如果你将stdout重定向到文件并且想要重定向stderr那么你必须确保在1>重定向之后指定2>&1 ,否则它将不起作用。

REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****

dir 2>&1 > a.txt

#4楼

要将stdout和stderr添加到脚本的常规日志文件中:

dir >> a.txt 2>&1

#5楼

MSKB的背景信息

虽然这个问题的公认答案是正确的,但它解释原因并没有多大帮助,而且由于语法不是很明确,我做了一个快速谷歌找出实际发生的事情。 希望这些信息对其他人有所帮助,我在这里发布。

来自MSKB110930

从命令提示符重定向错误消息:STDERR / STDOUT

摘要

使用“>”符号重定向应用程序的输出时,错误消息仍会打印到屏幕上。 这是因为错误消息通常发送到标准错误流而不是标准输出流。

控制台(命令提示符)应用程序或命令的输出通常发送到两个单独的流。 常规输出发送到标准输出(STDOUT),错误消息发送到标准错误(STDERR)。 使用“>”符号重定向控制台输出时,只是重定向STDOUT。 为了重定向STDERR,您必须为重定向符号指定“2>”。 这将选择第二个输出流,即STDERR。

命令dir file.xxx (其中file.xxx不存在)将显示以下输出:

Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876 File Not Found

如果使用dir file.xxx > nul将输出重定向到NUL设备,您仍会看到输出的错误消息部分,如下所示:

File Not Found

要将(仅)错误消息重定向到NUL ,请使用以下命令:

dir file.xxx 2> nul

或者,您可以将输出重定向到一个位置,将错误重定向到另一个位置。

dir file.xxx > output.msg 2> output.err

您可以使用“&1”命令将错误和标准输出打印到单个文件,将STDERR的输出重定向到STDOUT,然后将STDOUT的输出发送到文件:

dir file.xxx 1> output.msg 2>&1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值