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
を使用して、最初に存在するかどうかを識別する方法がありますか?
次のようなものを試してください。
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
IF%ERRORLEVEL%== 53GOTOを次のように置き換えます。
IF NOT %ERRORLEVEL%==0 GOTO
その理由は、エラー53がWindowsのエラーコードであるためです。 ERRORLEVELは異なる番号を与える可能性があります。 0ではないと言うことで、基本的に次のように言います。OK以外のエラー。
実際のエラーレベルを確認するには、
echo %ERRORLEVEL%
スクリプトで。これを行うと、エラーレベル2が発生する可能性があることがわかります。ネットワークパスが見つかりませんでした。
これはコマンドプロンプトでもテストできることに注意してください。したがって、最初にコマンドを実行してから、echo%ERRORLEVEL%と入力します。