質問: robocopy:スキップされた/失敗したファイルのログ名 次のバッチファイルを使用してrobocopyコマンドを実行しています。@echo off for /f %%a in ('wmic os get localdatetime ^| findstr ^[0-9]') do (set ts=%%a) robocopy [source] [target] /log+:d:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:1000 /z /np robocopy [source] [target] /log+:d:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:1000 /z /np これは、スキップ/失敗したファイルの名前をログに記録しなかったことを除いて、探していたすべての詳細をログに記録するのに役立ちました。スキップされた/失敗したファイルの名前をログに記録して、そのようなファイルを特定するのに役立つスクリプト/ robocopyコマンド/その他の方法はありますか?ネットワークを介した大量のファイル転送に対して、このようなファイルを特定することは非常に困難になります。私が同様の質問に最も近いのは this ですが、それでも受け入れられた/実用的な答えはありませんでしたedit 1:kamen minkovのコメントによると、robocopyコマンドに/ v(詳細)を含めました)。意図的にファイル転送に失敗すると、エラーが記録されます(履歴の再試行)が、これによりログファイルの解釈がますます困難になります。/vがなくても同じケースが観察されました。失敗した転送ファイル名を.txtログファイルに一度失敗したものとして記録したいだけです編集2:josefzの回答に従って、次のコードを実行しました。@echo off for /f %%a in ('wmic os get localdatetime ^| findstr ^[0-9]') do (set ts=%%a) robocopy [source] [target] /log+:d:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:0 /z /np /v if errorlevel 8 findstr "^[0-9,a-z]" "d:\logs\log_%ts:~0,8%.log" これにより、すべてのファイルを転送した後、次のエラーが発生しました(ネットワークケーブルを抜いていくつかのファイルに障害が発生したため、失敗したファイルがありました)。 findstr:d:\ abc\log\errorlog_20151029_1035.logを開くことができません 編集3:上記のエラーは、終了コードのログファイルの名前を誤って指定したために発生しました。正しいコードは次のとおりです(josefzの回答による):@echo off for /f %%a in ('wmic os get localdatetime ^| findstr ^[0-9]') do (set ts=%%a) robocopy [source] [target] /log+:d:\abc\log\log_%ts:~0,8%_%ts:~8,4%.log /e /xo /w:10 /r:2 /z /np /v /tee if errorlevel 8 findstr "^[0-9,a-z]" "d:\abc\log\log_%ts:~0,8%_%ts:~8,4%.log"
回答: _robocopy /?_(または robocopy.exe 説明)および robocopy終了コード に従って、以下を使用します。 _/v_は、スキップされたファイルを示す詳細な出力を生成します。 _/r:0_(再試行なし)は、使用中のファイルをスキップすることでコピーを高速化し、ログファイル内の偶発的な特定のエラーの説明を唯一の発生(これにより、その後の調査またはエラーの原因が容易になります)。 _if errorlevel 8 findstr "^[0-9,a-z]" "d:\logs\log_%ts:~0,8%.log"_説明: errorlevelが7より大きい場合は、コピー操作中に少なくとも1つの障害が発生したことを示します。 _findstr "^[0-9,a-z]" ..._は、たとえば、ログに記録されたエラーのみを表示します 2015/10/28 17:27:55 error 32 (0x00000020) copying file [source]\file.ext _the process cannot access the file because it is being used by another process._ (化粧品のバグ)_/w:10_の場合、_/r:0_は過剰にあるようです。 コード:_@echo off for /f %%a in ('wmic os get localdatetime ^| findstr ^[0-9]') do (set ts=%%a) robocopy [source] [target] /log+:d:\logs\log_%ts:~0,8%.log /e /xo /w:10 /r:0 /z /np /v if errorlevel 8 findstr "^[0-9,a-z]" "d:\logs\log_%ts:~0,8%.log" _