3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

robocopy にUTF-8のログを出力させる

Last updated at Posted at 2024-03-22

結論から書くとこうです。

以下のファイルを作成し、このバッチファイル自体も文字コードをUTF-8で保存します。

backup.bat
chcp 65001 > NUL
rem "実行します"
pause
robocopy "C:\Users\user1\Desktop\moge" "D:\hoge\moge" /copy:DAT /DCOPY:DAT /NP /MIR /FFT /R:3 /W:3 /UNILOG:NUL /TEE >> C:\Users\user1\Desktop\bk%time:~3,2%.txt

・バッチファイル自体を保存する時の UTF-8 はBOMは、有り・無しどちらでも行けそう

・ユーザー名:user1のデスクトップにbk00.txt が生成されます(数字は、現在時刻の"分"が2桁で入る)

・オプションはお好みで変えてください。このオプションでは、バックアップ処理を想定しており、コピー元を基準として、コピー先にミラーリングされます (ミラーリングなのでコピー先にしか無いファイルは削除される)。また、出来るだけファイル属性を維持します。

・robocopy 自身はcp65001で動くので、英語出力になる。またログファイル内でのログ出力先表記もLog File : \\.\NULになってしまうのであしからず。

・バッチファイル自体を ShiftJIS で保存すると、 rem 行から既に文字化けします。chcp 65001をした直後から、バッチファイルの読み込み自体もUTF-8になるようです。chcp 65001自体はASCIIコードなので文字コード依存が無く、そのまま読める。

・こちらの方がまとめられているように、 robocopy のUTF出力回りはカオスなようで、回避可能なコマンド/UNILOG:NUL /TEE >を使っています (/UNILOGは機能するけど/UNILOG+はダメってどうなってるのよ・・・。しかもNULなら+付けても良いって何それ・・・。なお、このサイトによると、UTF-16も工夫すれば行けそうです。)

chcp 65001 > NULは単に画面出力を捨てているだけです。chcp 65001だけでも動作はOK

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?