Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何处理';净使用量';是否在带有FOR循环的批处理文件中输出命令错误?_Batch File_Net Use - Fatal编程技术网

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
命令连接远程位置。
我想将其输出存储到变量中并对其进行处理。
当命令成功完成时,我的代码工作正常

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

  • 为什么会发生这种情况?
    当命令输出中出现错误时,为什么无法将输出存储在变量中
  • 是否有合适的方法记录“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