我在用着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仅捕获写入处理的标准输出STDOUT在两者之间运行命令行'
在一个单独的命令进程中开始cmd.exe /C
在后台。
解决方案是使用2>&1
正如微软在文章中解释的那样使用命令重定向运算符 https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490982(v=technet.10).
两个运营商>
and &
在这种情况下必须使用脱字符号进行转义^
在解析整个内容时首先被解释为文字字符FOR之前由 Window 命令处理器执行的命令行FOR命令行完全被执行。
for /F "delims=" %%a in ('net use \\!hostaddress!\!user! /user:!user! !user_pass! 2^>^&1') do (
"delims="
禁用使用空格和水平制表符作为分隔符将捕获的行拆分为标记,因为它定义了空的分隔符列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)