请求代码示例的解释
Requesting Explanation of code sample
后面的代码段,判断test_command
是否执行成功;如果它给出了一些错误,那么它会将错误消息存储在 err_msg
中。
FOR /F "delims=" %%a IN ('%test_command% 2^>^&1 1^>NUL') DO (
set err_msg="%%~a"
)
代码示例工作正常,但我想我没有完全理解它。特别是这部分 %test_command% 2^>^&1 1^>NUL
2^>^&1 1^>nul
与(但使用 ^
转义,因为它在 FOR /F 调用的命令中)2>&1 1>nul
意味着 - 打印输出流( 1 或命令打印其正常消息的位置)到 nul(无)并打印错误流(2 或命令打印其错误消息的位置)输出流。
由于 FOR /F
仅捕获输出流,因此强制 FOR /F 命令仅处理错误流。
丢弃 ^
是将特殊字符传递给 for /f
所需的转义字符,2>&1
意味着获取标准输出(流 1)的句柄,复制它并使用copy作为标准错误流(流2)的输出,然后1>nul
设置空设备作为输出标准流。
因此,它隐藏了进程发送到标准输出流的数据,并获取标准错误流并将其写入原始标准输出流。
每当 for /f
或管道需要检索命令生成但发送到错误流的信息时,都会使用它。 for /f
和管道命令都只处理标准输出流中的数据,因此,为了能够读取错误流,丢弃(或不丢弃)正常输出并将错误发送到原始输出流,因此它可以正常检索。
%test_command% 2^>^&1 1^>NUL
此命令运行 %test_command%
。
^
是一个转义字符(所以 >
被解释为重定向(管道字符)而不是普通字符)。
1^>NUL
将标准输出重定向到 nul
2^>^&1
将错误消息重定向到标准输出。
因此 stdout 被丢弃,stderr 被重定向到 stdout。
丢弃正常输出,现在将错误发送到正常输出。
来源Redirection and Syntax : Escape Characters, Delimiters and Quotes
Escape Character
^
Escape character.
Adding the escape character before a command symbol allows it to be
treated as ordinary text.
When piping or redirecting any of these characters you should prefix
with the escape character: & \ < > ^ |
e.g. ^\ ^& ^| ^> ^< ^^
后面的代码段,判断test_command
是否执行成功;如果它给出了一些错误,那么它会将错误消息存储在 err_msg
中。
FOR /F "delims=" %%a IN ('%test_command% 2^>^&1 1^>NUL') DO (
set err_msg="%%~a"
)
代码示例工作正常,但我想我没有完全理解它。特别是这部分 %test_command% 2^>^&1 1^>NUL
2^>^&1 1^>nul
与(但使用 ^
转义,因为它在 FOR /F 调用的命令中)2>&1 1>nul
意味着 - 打印输出流( 1 或命令打印其正常消息的位置)到 nul(无)并打印错误流(2 或命令打印其错误消息的位置)输出流。
由于 FOR /F
仅捕获输出流,因此强制 FOR /F 命令仅处理错误流。
丢弃 ^
是将特殊字符传递给 for /f
所需的转义字符,2>&1
意味着获取标准输出(流 1)的句柄,复制它并使用copy作为标准错误流(流2)的输出,然后1>nul
设置空设备作为输出标准流。
因此,它隐藏了进程发送到标准输出流的数据,并获取标准错误流并将其写入原始标准输出流。
每当 for /f
或管道需要检索命令生成但发送到错误流的信息时,都会使用它。 for /f
和管道命令都只处理标准输出流中的数据,因此,为了能够读取错误流,丢弃(或不丢弃)正常输出并将错误发送到原始输出流,因此它可以正常检索。
%test_command% 2^>^&1 1^>NUL
此命令运行 %test_command%
。
^
是一个转义字符(所以 >
被解释为重定向(管道字符)而不是普通字符)。
1^>NUL
将标准输出重定向到 nul
2^>^&1
将错误消息重定向到标准输出。
因此 stdout 被丢弃,stderr 被重定向到 stdout。
丢弃正常输出,现在将错误发送到正常输出。
来源Redirection and Syntax : Escape Characters, Delimiters and Quotes
Escape Character
^
Escape character.Adding the escape character before a command symbol allows it to be treated as ordinary text.
When piping or redirecting any of these characters you should prefix with the escape character: & \ < > ^ |
e.g. ^\ ^& ^| ^> ^< ^^