結論から書くとこうです。
以下のファイルを作成し、このバッチファイル自体も文字コードをUTF-8
で保存します。
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