在Windows命令中,“2>&1”是什么意思?

13

我在调整一个脚本时,发现了这一行:

ping -n 40 127.0.0.1 > NUL 2>&1

我从这个问题中得知,除了NUL之外的所有内容都会导致脚本休眠39秒。但是我不知道命令的剩余部分是什么意思。

2>&1是什么意思?


1
将ipconfig命令的所有输出(包括句柄2,即STDERR)重定向到句柄1(即STDOUT),然后将输出重定向到Output.log,请键入以下内容:https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true - ceejayoz
2> 重定向 STDERR 输出,&1 指定用于文件名的批处理文件参数。 - rcgldr
1
可能是cmd.exe重定向运算符的顺序和位置的重复问题。 - aschipfl
2个回答

13

分解这条线

ping -n 40 127.0.0.1

向本地主机发送40个ping数据包。如果没有任何问题,默认行为是在数据包之间等待1秒,因此会产生39秒的延迟。

>nul   or   1>nul

将标准输出流(流号1)中的任何内容重定向到 nul 设备。发送到此设备的任何内容都将被丢弃。其效果是隐藏 ping 命令的所有正常输出。

2>&1

这会将任何写入标准错误流(流号2)的内容重定向。与前面的情况类似,这是为了隐藏输出(在本例中是错误),但是不像直接请求写入null设备(我们可以使用2>nul),这种语法请求将标准错误流中的数据发送到与标准输出流中使用的句柄副本。


1
请注意,在cmd中,2>&1必须放在最后。否则它将不会起作用:
dir foo 2>&1 >out

File Not Found

在PowerShell中,你可以以任何顺序编写代码。
你还可以将错误信息放在单独的文件中:
dir foo 2>err >out

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接