- ベストアンサー
RobocopyのログにExtraを書かない方法
Robocopyを使ってファイルサーバーのバックアップをしています。正常に起動した確認としてログを書き出していますが、ログファイルが大きくなり過ぎないように、更新したファイル名だけをログに記載したいのですが、Extra Fileの情報が多量に書き込まれて紛らわしくなっています。Extraファイルの多くは運用の理由によるファイル移動やフォルダ名の変更でファイ自体の変更は稀です。Extra情報がなくても新規コピーの情報さえあれば用が足りるので、Extra情報を書き出したくないのですが、そのうなオプションが見当たりません。 どなたか解決方法をご存知でしたら教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 例えば下記のようになります。 自分の環境に合わせて適用してみてください。 (1)下記のscriptの(わずか1行です。途中で改行はありません。) myrobolog.ps1 ファイルを作成します。 Get-Content E:\robolog.log | where { $_ -notmatch "\*EXTRA" } | Out-File E:\mylogo.txt (2)バッチファイルの後部に下記のscriptを追加します。 powershell .\myrobolog.ps1 以上です。 ---ご参考 ドライブレターやファイル名は任意に変更してください。 Get-Content E:\robolog.log でlogファイルを丸ごと読み込みます。 where { $_ -notmatch "\*EXTRA" } で *EXTRA という文字列を含まない行だけを抽出します。 Out-File E:\mylogo.txt で抽出した行をファイルに書き出します。 バッチファイルに追加した ファイル名の先頭のピリオドはカレントフォルダを意味しています。 つまり、バッチファイルと同じフォルダに myrobolog.ps1 を置いた場合の記述です。 ピリオドを書かない場合は フルPATHで指定すればいいです。 --- No.2で書いた「ログファイルが大量な場合」とは500MBを超えるような場合の話です。 Get-Content がファイルを丸ごと読んで処理しますのでメモリを使うという話です。 わずか10MB程度であれば何も問題ありません。(処理は瞬時に終わるはずです)
その他の回答 (3)
- mdmp2
- ベストアンサー率55% (438/787)
新規コピーだけで良いなら、findstr コマンドを使ってrobocopy のログから"新しい" が含まれる行を抽出するといいと思います。 robocopy のバッチファイルに組み込むことができます。 例: findstr /c:"新しい" D:\log\.txt >D:\log\log_new.txt ”新しい”で抽出されたファイルのパスを表示するためにrobocopy に/FP オプションを付けるといいと思います。 私はsfc /scannow のログの中から”Cannot Repair" を抽出するのに使っています。
お礼
ありがとうございます。 出来そうな気がしてきました。
- kteds
- ベストアンサー率42% (1882/4440)
ログ出力にExtra情報を書き出さない、というオプションはありませんので、 いったん書き出したログファイルを加工する必要があります。 例えば powershell でドライブE の robolog.log ファイルから *EXTRA を含む行を除外する例は下記のようになります。 Get-Content E:\robolog.log | where { $_ -notmatch "\*EXTRA" } ただし、ログファイルが大量な場合は上記のGet-Contentではムリがあります。
お礼
回答ありがとうございます。 教えていただきましたコードをRobocopyと同じバッチファイルの中に書き込めると有り難いと思いました。実際の運用では、Robocopy終了後にログファイルをテキストに変換したものをメールに添付して受け取れるようにしています。その都合で、メールに添付する前のログまたはテキストファイルからExtraを含む行を削除できると受け取ったログ情報を確認しやすくなると願っている次第です。現状では、実際のログファイルの大きさは、500KBから6MBくらいで変化しています。6MBになる殆どの要因がフォルダ名変更や移動によるもので実際のファイル自体が更新されている訳ではありません。無駄な情報が大半のログとなってしまっています。
- HohoPapa
- ベストアンサー率65% (455/693)
どのようなパラメータを指定しているのかが不明なので 深追いしていませんが、 おそらく パラメータの指定によって期待のようなログにすることは できないだろうと思います。 私だったら、実行結果の確認作業を 生ログを見ることで行うのではなく VBAを使い、確認の必要なレコードだけに絞るとか あるいは、確認作業の大半を自動化します。
お礼
回答ありがとうございます。ログオプションには無いので困っています。 別のDosコマンドを最後に記述して、ログファイルのExtraで始まる行をすべて削除するということができると良いのかも知れません。
お礼
ありがとうございます。 この方法も試してみます。