如何使用 FOR 循环处理批处理文件中的 'net use' 命令错误输出?
How to process 'net use' command error output in batch file with a FOR loop?
我在批处理文件中使用 net use
命令连接远程位置。
我想将它的输出存储到一个变量中并对其进行处理。
当命令成功完成时,我的代码工作正常。
但是,如果出现一些错误,比如密码错误,那么我无法将错误输出存储在变量中。它直接打印到控制台window,其中脚本是运行。请帮助解决以下问题:
- 为什么会这样?
为什么我在命令输出出错时无法将输出存储到变量中?
- 是否有合适的方法来记录 'net use' 命令的 ERROR 输出?
以下是我的代码:
: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 仅捕获写入的标准输出以处理 STDOUT 上的 运行 两个 '
之间的命令行在一个单独的命令进程在后台以 cmd.exe /C
开始。
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="
禁用使用 space 和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。
我在批处理文件中使用 net use
命令连接远程位置。
我想将它的输出存储到一个变量中并对其进行处理。
当命令成功完成时,我的代码工作正常。
但是,如果出现一些错误,比如密码错误,那么我无法将错误输出存储在变量中。它直接打印到控制台window,其中脚本是运行。请帮助解决以下问题:
- 为什么会这样?
为什么我在命令输出出错时无法将输出存储到变量中? - 是否有合适的方法来记录 'net use' 命令的 ERROR 输出?
以下是我的代码:
: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 仅捕获写入的标准输出以处理 STDOUT 上的 运行 两个 '
之间的命令行在一个单独的命令进程在后台以 cmd.exe /C
开始。
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="
禁用使用 space 和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。