我正在尝试将Windows 命令的所有输出(stdout + stderr)重定向到单个文件:
C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.
是否有可能,或者我应该只重定向到两个单独的文件?
8铜牌
- 22
- 1
7 个答案 正确答案
你要:
1) 把正确和错误都输出到 a.txt
dir > a.txt 2>&1
更多解释和示例在 Microsoft 文档页面Redirecting error messages from Command Prompt: STDERR/STDOUT。
2) 把正确和错误都追加到 a.txt
dir >> a.txt 2>&1
3) 仅把错误都输出到 a.txt
dir 2 > a.txt
4) 仅把正确都输出到 a.txt
dir > a.txt 或者 dir 1 > a.txt
3) 仅把错误都输出到 a.txt
dir 2 > a.txt
4) 仅把正确都输出到 a.txt
dir > a.txt 或者 dir 1 > a.txt
要将错误消息重定向到 NUL,请使用以下命令:
dir file.xxx 2> nul
或者,您可以将输出重定向到一个地方,并将错误重定向到另一个地方。
dir file.xxx 1> output.msg 2>&1
&1
您可以使用以下命令将 STDERR 的输出重定向到 STDOUT,然后将输出从 STDOUT 发送到文件,将错误和标准输出打印到单个文件:
dir file.xxx 1> output.msg 2>&1
把 标准输出至屏幕 这个看不懂,不是我期望的那样
# net user /domain JS.FG.WH.PPS 1>stdout
把 错误输出至屏幕 这个看不懂,不是我期望的那样
# net user /domain JS.FG.WH.PPS 2>stdout
谢谢你,不知道这个unix shell语法也适用于DOS!
– 链轮起子
2012 年 8 月 14 日 17:00
25
这非常适合隐藏所有输出.. net stop w3svc >NUL 2>&1.. 谢谢!
– 科迪布朗
2013 年 4 月 4 日 17:55
4
18
如果有句柄,句柄(即2)和重定向运算符(即>)之间不能有空格。因此2> 2.txt有效(或2> &1) 2 > 2.txt无效;2 > &1才不是。
– 红豌豆
2015 年 4 月 3 日 21:41
2
微软没有原生T恤真是太可惜了
– JJS
2016 年 10 月 24 日 17:19
来自 Microsoft 文档的背景信息
虽然这个问题的公认答案是正确的,但它实际上并不能解释它为什么起作用,而且由于语法不是很清楚,
我做了一个快速的 www 搜索以找出实际发生的情况。希望这些信息对其他人有所帮助,我将其发布在这里。
取自 Microsoft 文档页面:
从命令提示符重定向错误消息:STDERR/STDOUT
概括
使用>符号重定向应用程序的输出时,错误消息仍会打印到屏幕上。这是因为错误消息
通常发送到标准错误流而不是标准输出流。
控制台(命令提示符)应用程序或命令的输出通常发送到两个单独的流。
常规输出发送到标准输出 (STDOUT),错误消息发送到标准错误 (STDERR)。当您使用>符号重定向控制台输出时,
您只是重定向 STDOUT。为了重定向 STDERR,您必须指定2>重定向符号。这将选择第二个输出流,即 STDERR。
例子
该命令dir file.xxx(其中 file.xxx 不存在)将显示以下输出:
驱动器 F 中的卷是 Candy Cane 卷序列号是 34EC-0876
找不到文件
如果您使用 将输出重定向到 NUL 设备dir file.xxx > nul,您仍然会看到错误消息:
文件未找到
要将错误消息重定向到 NUL,请使用以下命令:
dir file.xxx 2> nul 或者,您可以将输出重定向到一个地方,并将错误重定向到另一个地方。
dir file.xxx 1> output.msg 2>&1 &1您可以使用以下命令将 STDERR 的输出重定向到 STDOUT,然后将输出从 STDOUT 发送到文件,
将错误和标准输出打印到单个文件:
dir file.xxx 1> output.msg 2>&1
来自 https://stackoverflow.com/questions/1420965/how-to-redirect-windows-cmd-stdout-and-stderr-to-a-single-file
把 标准输出至屏幕 这个看不懂,不是我期望的那样
# net user /domain JS.FG.WH.PPS 1>stdout
把 错误输出至屏幕 这个看不懂,不是我期望的那样
# net user /domain JS.FG.WH.PPS 2>stdout
谢谢你,不知道这个unix shell语法也适用于DOS!
– 链轮起子
2012 年 8 月 14 日 17:00
25
这非常适合隐藏所有输出.. net stop w3svc >NUL 2>&1.. 谢谢!
– 科迪布朗
2013 年 4 月 4 日 17:55
4
18
如果有句柄,句柄(即2)和重定向运算符(即>)之间不能有空格。因此2> 2.txt有效(或2> &1) 2 > 2.txt无效;2 > &1才不是。
– 红豌豆
2015 年 4 月 3 日 21:41
2
微软没有原生T恤真是太可惜了
– JJS
2016 年 10 月 24 日 17:19
来自 Microsoft 文档的背景信息
虽然这个问题的公认答案是正确的,但它实际上并不能解释它为什么起作用,而且由于语法不是很清楚,
我做了一个快速的 www 搜索以找出实际发生的情况。希望这些信息对其他人有所帮助,我将其发布在这里。
取自 Microsoft 文档页面:
从命令提示符重定向错误消息:STDERR/STDOUT
概括
使用>符号重定向应用程序的输出时,错误消息仍会打印到屏幕上。这是因为错误消息
通常发送到标准错误流而不是标准输出流。
控制台(命令提示符)应用程序或命令的输出通常发送到两个单独的流。
常规输出发送到标准输出 (STDOUT),错误消息发送到标准错误 (STDERR)。当您使用>符号重定向控制台输出时,
您只是重定向 STDOUT。为了重定向 STDERR,您必须指定2>重定向符号。这将选择第二个输出流,即 STDERR。
例子
该命令dir file.xxx(其中 file.xxx 不存在)将显示以下输出:
驱动器 F 中的卷是 Candy Cane 卷序列号是 34EC-0876
找不到文件
如果您使用 将输出重定向到 NUL 设备dir file.xxx > nul,您仍然会看到错误消息:
文件未找到
要将错误消息重定向到 NUL,请使用以下命令:
dir file.xxx 2> nul 或者,您可以将输出重定向到一个地方,并将错误重定向到另一个地方。
dir file.xxx 1> output.msg 2>&1 &1您可以使用以下命令将 STDERR 的输出重定向到 STDOUT,然后将输出从 STDOUT 发送到文件,
将错误和标准输出打印到单个文件:
dir file.xxx 1> output.msg 2>&1
来自 https://stackoverflow.com/questions/1420965/how-to-redirect-windows-cmd-stdout-and-stderr-to-a-single-file