批处理文件,如果发生错误则跳过一步

批处理文件,如果发生错误则跳过一步

我正在尝试编写一个脚本,使用 Robocopy 自动从两个外部位置复制一些文件。如果其中一个位置不可用,我希望脚本跳过一个步骤。我正在使用以下脚本:

@echo off

NET USE \\192.168.10.90\IPC$

ROBOCOPY \\192.168.10.90\lgrdata\ \ICOS\Analyser_backups\LGR_Flux\ /NP /TEE /E /dcopy:T /Z /LOG:C:\logfiles\LGR\robocopyjob_log.txt

NET USE \\192.168.10.90\IPC$ /D



NET USE \\192.168.10.91\IPC$

ROBOCOPY \\192.168.10.91\lgrdata\ \ICOS\Analyser_backups\LGR_Profile\ /NP /TEE /E /dcopy:T /Z /LOG+:C:\logfiles\LGR\robocopyjob_log.txt

NET USE \\192.168.10.91\IPC$ /D


robocopy C:\ICOS\Analyser_backups\ Z:\Analyser_backups\ /NP /TEE /E /dcopy:T /Z /LOG+:C:\logfiles\LGR\robocopyjob_log.txt


for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time: =0%") do rename "C:\logfiles\LGR\robocopyjob_log.txt" rclog_%%c-%%a-%%b_%%d%%e.txt

当两个网络位置都可用时,这可以正常工作。我希望脚本在任一位置不存在时继续运行。当一个仪器不存在时,我收到错误 53,然后等待 30 秒,然后重试连接。这种情况会一直持续下去。

我尝试使用IF ERRORLEVEL 53 GOTO

如果我将其放在NET USE命令后面,它似乎会被忽略。如果我将其放在脚本的开头,脚本会关闭而不执行任何操作。

如果仪器不存在,有什么想法可以跳过这一步吗?也许有某种方法可以PING先识别它是否存在?

答案1

尝试这样的操作:

ping -n 1 192.168.10.91 > NUL
IF ERRORLEVEL 0 (goto :copyhost1) ELSE goto :skipcopyhost1
:copyhost1
NET USE \\192.168.10.91\IPC$
ROBOCOPY \192.168.10.91\lgrdata\ \ICOS\Analyser_backups\LGR_Profile\ /NP /TEE /E /dcopy:T /Z /LOG+:C:\logfiles\LGR\robocopyjob_log.txt
:skipcopyhost1

答案2

将 IF %ERRORLEVEL%==53 GOTO 替换为以下内容:

IF NOT %ERRORLEVEL%==0 GOTO

原因是,错误 53 是 Windows 错误代码。ERRORLEVEL 可能会给出不同的数字。通过表示非 0,您基本上表示:除 OK 之外的任何错误。

要查看实际的错误级别,请使用

echo %ERRORLEVEL%

在您的脚本中。如果您这样做,您会发现它可能会给出 ERRORLEVEL 2:未找到网络路径。

注意,您也可以在命令提示符中测试这一点。因此,首先执行命令,然后输入 echo %ERRORLEVEL%

相关内容