我在批处理文件中使用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
)
)
答案 0 :(得分:4)
写入错误输出以处理 STDERR (标准错误)。但 FOR 仅在'
开始的单独命令进程中运行两个cmd.exe /C
之间的命令行时,仅捕获为处理 STDOUT 而编写的标准输出背景。
正如Microsoft在Using Command Redirection Operators的文章中解释的那样,解决方案正在使用2>&1
。
在这种情况下,必须使用插入符>
对两个运算符&
和^
进行转义,以便在解析整个 FOR 时首先将其解释为文字字符在执行 FOR 命令行之前,由Window命令处理器命令行。
for /F "delims=" %%a in ('net use \\!hostaddress!\!user! /user:!user! !user_pass! 2^>^&1') do (
"delims="
禁止使用空格和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。