web-dev-qa-db-ja.com

バッチファイル、エラーが発生した場合は手順をスキップします

Robocopyを使用して2つの外部の場所からいくつかのファイルを自動コピーするスクリプトを作成しようとしています。場所の1つが利用できない場合、スクリプトで手順をスキップしたい。次のスクリプトを使用しています。

@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

両方のネットワークロケーションが利用可能な場合、これは正常に機能します。どちらかの場所が存在しない場合でも、スクリプトを続行したいと思います。 1つの機器が存在しない場合、エラー53が発生し、30秒間待機してから、接続が再試行されます。これは永遠に続きます。

IF ERRORLEVEL 53 GOTOを使ってみました

これをNet Useコマンドの後に置くと、無視されているようです。スクリプトの先頭に配置すると、何もせずにスクリプトが閉じます。

機器が存在しない場合にステップをスキップする方法はありますか?おそらく、PINGを使用して、最初に存在するかどうかを識別する方法がありますか?

3
Robert Holden

次のようなものを試してください。

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
3
David

IF%ERRORLEVEL%== 53GOTOを次のように置き換えます。

IF NOT %ERRORLEVEL%==0 GOTO

その理由は、エラー53がWindowsのエラーコードであるためです。 ERRORLEVELは異なる番号を与える可能性があります。 0ではないと言うことで、基本的に次のように言います。OK以外のエラー。

実際のエラーレベルを確認するには、

echo %ERRORLEVEL%

スクリプトで。これを行うと、エラーレベル2が発生する可能性があることがわかります。ネットワークパスが見つかりませんでした。

これはコマンドプロンプトでもテストできることに注意してください。したがって、最初にコマンドを実行してから、echo%ERRORLEVEL%と入力します。

4
LPChip