web-dev-qa-db-ja.com

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"
1
Yash Saraiya

_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"
_
3
JosefZ

この記事 によると、/vオプションを試してみることをお勧めします。

(...)詳細な出力を生成し、スキップされたすべてのファイルを表示します。

1
Kamen Minkov