Batch file 如何监视特定命令行错误(Windows)?
我需要一个包含多个驱动器映射语句的批处理文件,如下所示:Batch file 如何监视特定命令行错误(Windows)?,batch-file,Batch File,我需要一个包含多个驱动器映射语句的批处理文件,如下所示: @echo off net use Q: \\serve\share 当驱动器已经连接时,我得到系统错误85。我如何监控85错误并采取我自己的行动(比如已经连接了廉价的goto)?如果是85以外的任何错误,我希望看到显示的消息(或者从变量抓取它并显示它…无论什么) 我尝试了一些我发现的示例,但我似乎无法抑制系统错误显示,也无法找出如何专门针对85错误设置陷阱。如果我能得到一个关于如何进行错误抑制、捕获等的示例,我可能会手工编写其余的代码
@echo off
net use Q: \\serve\share
当驱动器已经连接时,我得到系统错误85。我如何监控85错误并采取我自己的行动(比如已经连接了廉价的goto)?如果是85以外的任何错误,我希望看到显示的消息(或者从变量抓取它并显示它…无论什么)
我尝试了一些我发现的示例,但我似乎无法抑制系统错误显示,也无法找出如何专门针对85错误设置陷阱。如果我能得到一个关于如何进行错误抑制、捕获等的示例,我可能会手工编写其余的代码
谢谢
net use Q: \\serve\share 2>&1 | find "85" &&(
echo error 85
)
??在映射之前检查映射,而不是在映射之后检查错误 编辑以更正现有地图搜索中的错误
call :doMap q: "\\server\share"
....
:doMap drive share
rem search for drive map in server
net use | find /i "%~1" | find /i "%~2" > nul
if errorlevel 1 (
rem if not found, test if drive letter is mapped
rem and remove map if needed
net use | find /i "%~1" > nul && net use "%~1" /delete >nul
rem map drive to server share
net use %~1 "%~2" > nul
)
goto :eof
谢谢,看起来很棒。您的调用是否表示代码的其余部分将位于一个单独的文件中,该文件将根据需要为每个要检查/映射的驱动器调用?否,所有代码都将放入一个批处理文件中。它被设计为主批处理文件中的一个子例程。只需在脚本末尾添加
:doMap
子例程即可。当需要映射时,不要调用net use
来处理错误,而是使用call:doMap letter share
,如示例所示。您是否有意同时使用findstr
和find
?如果是,为什么?@Mattwillkie,这是故意的,但也包括一个错误(现在更正)findstr
更灵活,但负载更重,因此如果find
足以解决问题,请使用它。我包括了findstr
,以缩短初始过滤器,但我没有对其进行彻底测试,并且逻辑中存在错误,因此删除了它。非常感谢。