3

Я пытаюсь написать скрипт, который автоматизирует копирование некоторых файлов из двух внешних мест с помощью 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 чтобы определить, существует ли он первым?

2 ответа2

3

Замените ваш IF% ERRORLEVEL% == 53 GOTO следующим:

IF NOT %ERRORLEVEL%==0 GOTO

Причина в том, что ошибка 53 является кодом ошибки Windows. ERRORLEVEL может дать другое число. Сказав не 0, вы в основном говорите: любая ошибка, кроме ОК.

Чтобы увидеть фактический уровень ошибки, используйте

echo %ERRORLEVEL%

в вашем сценарии. Если вы сделаете это, вы обнаружите, что это может дать ОШИБКУ 2: Сетевой путь не найден.

Обратите внимание, что вы можете проверить это также в командной строке. Поэтому сначала выполните команду, а затем введите echo% ERRORLEVEL%

2

Попробуйте что-то вроде этого:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .