Batch file 请求解释代码示例
在代码段之后,查找Batch file 请求解释代码示例,batch-file,cmd,Batch File,Cmd,在代码段之后,查找test_命令是否已成功执行;如果它给出了一些错误,那么它会将错误消息存储在err\u msg中 FOR /F "delims=" %%a IN ('%test_command% 2^>^&1 1^>NUL') DO ( set err_msg="%%~a" ) 代码示例工作正常,但我认为我没有完全理解它。具体地说,这一部分%test_命令%2^>^&11^>NUL2^>^&11^>NUL与(但使用^转义,因为它在FOR/F中调用了命令)2>&11>NUL
test_命令
是否已成功执行;如果它给出了一些错误,那么它会将错误消息存储在err\u msg
中
FOR /F "delims=" %%a IN ('%test_command% 2^>^&1 1^>NUL') DO (
set err_msg="%%~a"
)
代码示例工作正常,但我认为我没有完全理解它。具体地说,这一部分
%test_命令%2^>^&11^>NUL
2^>^&11^>NUL
与(但使用^
转义,因为它在FOR/F中调用了命令)2>&11>NUL
,这意味着将输出流(1或命令打印其正常消息的位置)打印到NUL(无)并将错误流(2或命令打印错误消息的位置)打印到输出流
由于
FOR/F
仅捕获输出流,这将强制FOR/F命令仅处理错误流。丢弃将特殊字符传递到FOR/F
所需的转义字符^
,2>&1
意味着获取标准输出的句柄(流1),复制它并使用复制作为标准错误流(流2)的输出,然后1>nul
将空设备设置为标准流的输出
因此,它隐藏了进程发送到标准输出流的数据,并获取标准错误流并将is写入原始标准输出流
每当/f或管道需要检索由命令生成但发送到错误流的信息时,就会使用此选项。对于/f和管道命令都只处理标准输出流中的数据,因此,为了能够读取错误流,将丢弃(或不丢弃)正常输出,并将错误发送到原始输出流,以便正确检索
%test_command% 2^>^&1 1^>NUL
此命令运行%test\u命令%
^
是转义字符(用于将
解释为重定向(管道字符),而不是普通字符)
1^>NUL
将标准输出重定向到NUL
2^>^&1
将错误消息重定向到标准输出
所以stdout被丢弃,stderr被重定向到stdout
正常输出被丢弃,错误现在被发送到正常输出
来源和 转义字符
^
转义字符
在命令符号之前添加转义字符可使其
作为普通文本处理
当管道或重定向这些字符中的任何一个时,您应该使用前缀
带有转义字符:&\<>^|
e、 g.^^^&^^^^>^<^^