3

net use在批处理文件中使用命令来连接远程位置。
我想将它的输出存储到一个变量中并处理它。
当命令成功完成时,我的代码工作正常。

但是,如果有一些错误,比如密码错误,那么我无法将错误输出存储在变量中。它直接打印到运行脚本的控制台窗口。请帮助解决以下问题:

  1. 为什么会这样?
    当命令输出中出现错误时,为什么我无法将输出存储在变量中?
  2. 是否有合适的方法来记录“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                      
    )
)
4

1 回答 1

4

写入错误输出以处理STDERR(标准错误)。但是FOR仅捕获编写用于处理STDOUT的标准输出,该输出在后台'启动的单独命令进程中运行两者之间的命令行。cmd.exe /C

2>&1正如 Microsoft 在有关Using Command Redirection Operators的文章中所解释的那样,该解决方案正在使用。

>在这种情况下,必须使用插入字符对这两个运算符&进行转义,以便在完全执行FOR命令行之前由 Window 命令处理器^解析整个FOR命令行时首先将其解释为文字字符。

for /F "delims=" %%a in ('net use \\!hostaddress!\!user! /user:!user! !user_pass! 2^>^&1') do (

"delims="禁止使用空格和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。

于 2017-08-18T16:15:33.740 回答