Arquivo em lote, pule uma etapa se ocorrer um erro

3

Estou tentando escrever um script que automatiza a cópia de alguns arquivos de dois locais externos usando o Robocopy. Eu quero que o script pule uma etapa se um dos locais não estiver disponível. Estou usando o seguinte script:

@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

Isso funciona bem quando os dois locais de rede estão disponíveis. Eu quero que o script continue se a localização não estiver presente. Eu recebo o erro 53 quando um instrumento não está presente e, em seguida, há uma espera de 30 segundos e, em seguida, a conexão é repetida. Isso continua para sempre.

Eu tentei usar IF ERRORLEVEL 53 GOTO

Se eu colocar isso após o comando NET USE , ele será ignorado. Se eu colocá-lo no início do script, o script é fechado sem fazer nada.

Alguma idéia de como posso pular a etapa se o instrumento não estiver presente? Talvez haja alguma maneira de usar PING para identificar se existe primeiro?

    
por Robert Holden 15.04.2014 / 13:25

2 respostas

2

Tente algo assim:

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 2.168.10.91\lgrdata\ \ICOS\Analyser_backups\LGR_Profile\ /NP /TEE /E /dcopy:T /Z /LOG+:C:\logfiles\LGR\robocopyjob_log.txt
:skipcopyhost1
    
por 15.04.2014 / 13:53
3

Substitua seu IF% ERRORLEVEL% == 53 GOTO pelo seguinte:

IF NOT %ERRORLEVEL%==0 GOTO

A razão é que o erro 53 é o código de erro do Windows. ERRORLEVEL pode fornecer um número diferente. Ao dizer não 0, você basicamente diz: qualquer erro que não seja OK.

Para ver o nível de erro real, use

echo %ERRORLEVEL%

no seu script. Se você fizer isso, descobrirá que isso poderia resultar em ERRORLEVEL 2: o caminho da rede não foi encontrado.

Note que você pode testar isso também em um prompt de comando. Então, primeiro execute o comando e digite echo% ERRORLEVEL%

    
por 15.04.2014 / 14:23