BATファイルでBOM付きUTF-8ファイルからBOMを取り除く方法
検証環境
Windows10 64bit
方法
input.txt
からBOMを取り除いて、 out.txt
テキストを出力する場合
|
|
コマンド自体は参考にしたところのほぼコピーですが、参照元には解説がなかったので分かる範囲で解説します。
解説
まずは各コマンドや引数を/?
などで確認
start /min /wait
外部プロセスでコマンドを起動(start)。ウィンドウを最小化(/min)、実行が終わるまで待つ(/wait)。cmd /c
コマンドプロンプトを起動し、引数に渡された文字列のコマンドを実行し終了する(/c)。&
はコマンドの実行が終わったら次のコマンドを実行するの意味。bash
で言うところの;
^
はコマンドプロンプトのエスケープシーケンス^&
はエスケープされて文字列になった&
^>
はエスケープされて文字列になった>
chcp 65001
コマンドプロンプトの文字コードをUTF-8に変更する。(デフォルトはShiftJIS)cmd /u
は、内部コマンドの出力結果をUnicodeでパイプまたはファイルに出力するオプション- デフォルトは
/a
(ANSI)
- デフォルトは
type
コマンドはテキストファイルの内容を出力する内部コマンドcat
みたいなもの- ShiftJISでもUTF-8でもUnicodeでも何でも読めるみたい
まとめるとこんなステップになります。
- コンソールの文字コードをUTF-8にする
- Unicodeのモードでinput.txtを開き、$$$に保存
- $$$ファイルは「BOM付きUnicode」になる
- ANSIのモードで$$$を開き、out.txtに保存
- ANSIのモードではBOMが付かないため、BOMが外れる(現象からの予想)
- out.txtは「BOMなしUTF-8」になる
- $$$ファイルを削除
ANSIのコマンドプロンプトでUTF-8のファイルをtype
してリダイレクトしてもBOMは外れない模様。
(文字コードが同じだから変換が発生しない?)
なので、一旦unicodeを経由して変換することで無理やりBOMを取り外してるみたい。