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を取り外してるみたい。