Batch file 如何处理';净使用量';是否在带有FOR循环的批处理文件中输出命令错误?
我正在批处理文件中使用Batch file 如何处理';净使用量';是否在带有FOR循环的批处理文件中输出命令错误?,batch-file,net-use,Batch File,Net Use,我正在批处理文件中使用net use命令连接远程位置。 我想将其输出存储到变量中并对其进行处理。 当命令成功完成时,我的代码工作正常 但是,如果有一些错误,比如错误的密码,那么我无法将错误输出存储在变量中。它直接打印到运行脚本的控制台窗口。请提供以下帮助: 为什么会发生这种情况? 当命令输出中出现错误时,为什么无法将输出存储在变量中 是否有合适的方法记录“net use”命令的错误输出 以下是我的代码: :connNEWlocation echo Connecting required remo
net use
命令连接远程位置。我想将其输出存储到变量中并对其进行处理。
当命令成功完成时,我的代码工作正常 但是,如果有一些错误,比如错误的密码,那么我无法将错误输出存储在变量中。它直接打印到运行脚本的控制台窗口。请提供以下帮助:
当命令输出中出现错误时,为什么无法将输出存储在变量中
:connNEWlocation
echo Connecting required remote location...
for /f "tokens=1,2,3,4,5,6,7,8 delims=*" %%a IN ('net use \\!hostaddress!\!user! /user:!user! !user_pass!') DO (
if "%%a"=="The command completed successfully." (
echo Connected successfully^!
) else (
echo ERROR:"%%a"
echo do something based on error obtained here
)
)
错误输出被写入处理STDERR(标准错误)。但是,FOR只捕获在后台以
cmd.exe/C
启动的单独命令进程中运行两个“
之间的命令行时为处理STDOUT而写入的标准输出
解决方案是使用2>&1
,正如Microsoft在关于的文章中所解释的那样
在这种情况下,两个运算符
和&
必须使用插入符号^
进行转义,以便在执行FOR命令行之前,Windows命令处理器首先将整个FOR命令行解析为文字字符
for /F "delims=" %%a in ('net use \\!hostaddress!\!user! /user:!user! !user_pass! 2^>^&1') do (
“delims=“
禁止使用空格和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。错误输出转到io流编号2。要将其与正常输出合并,请在for/f命令中使用2>&1
,您需要转义2^>^&1