gpt4 book ai didi

batch-file - 如何使用 FOR 循环处理批处理文件中的 'net use' 命令错误输出?

转载 作者:行者123 更新时间:2023-12-01 12:19:10 25 4
gpt4 key购买 nike

我在批处理文件中使用 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
)
)

最佳答案

写入错误输出以处理 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=" 禁止使用空格和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了一个空的分隔符列表。

关于batch-file - 如何使用 FOR 循环处理批处理文件中的 'net use' 命令错误输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45760676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com