我正在尝试编写一个脚本,使用 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%