しもむブログ

技術メモ。といっても高度なことは書けないので…初心者がハマったところや、ググってもすぐには出てこないようなものを書くつもり。

バッチファイルからUTF-8のファイル(日本語あり)を作りたい

  • 文字コードを変えて、echoしてファイルにリダイレクトすればいけるもんだと思ったら謎な挙動だったのでメモ
  • 人様のマシンで実行してもらうのでコマンドプロンプトのフォントを変えるとかそういう操作もなしにしたかったという前提あり

  • 結果として、日本語入力が可能な状態で変数に出しておかないといけないっぽい

  • 検証用のバッチ

@echo off
@REM Shift_JIS
chcp 932
set HOGE=ほげ

echo ほげ>sample1.txt
echo %HOGE%>sample2.txt

@REM UTF-8
chcp 65001
set HOGEHOGE=ほげほげ

echo ほげ>sample3.txt
echo %HOGE%>sample4.txt
echo %HOGEHOGE%>sample5.txt


nkf32.exe -g sample1.txt
nkf32.exe -g sample2.txt
nkf32.exe -g sample3.txt
nkf32.exe -g sample4.txt
nkf32.exe -g sample5.txt

pause
  • バッチ実行の結果がこちら
    • nkfの結果は想定通り
Active code page: 65001
Shift_JIS
Shift_JIS
UTF-8
UTF-8
UTF-8
Press any key to continue . . .
  • しかし、実際にsample3~5.txtファイルを開いてみるとこんな感じ
  • sample4.txtだけが期待したファイルになっている

f:id:mshimomu:20170505160152p:plain

  • まとめると、こんな感じのバッチになる
@echo off
@REM デフォルトはShift_JIS
set HOGE=ほげ

chcp 65001
echo %HOGE%>sample.txt

pause