2014年12月17日水曜日

WindowsのコマンドプロンプトでUnicodeのファイル名を扱うためのバッチファイルをどうたらこうたら。

とりあえず目的は果たしたんだけど、イマイチまだわかってない感じがする。

でも、一応備忘録としてメモしておこう。

まずは復習

Windowsのコマンドプロンプト(cmd.exe)でウムラウトやアクサンのついた文字を使いたかったら、コマンドプロンプトを開いた後にもう一度cmd.exeを「/u」オプションをつけて実行する。

たとえば、そういう文字のついたファイルを含むたくさんのファイルをいっぺんに処理するため、バッチファイルを作る。まずはディレクトリ内の全ファイル名を取得してみよう。

dir /b > DirList.txt

これでカレントディレクトリのファイル名がDirList.txtに1行1ファイルで出力される。

このファイルを開くと、その文字コードはUTF-16LE(BOM無し)になっている。

さて、このファイルをあれこれして、バッチファイルを作ったとしよう。

バッチファイルをそのままUTF-16LE(BOM無し)で保存すると、なんとこれが動かない。バッチファイルの最初の1文字をコマンドとして処理しようとして、「そんなコマンドないよ」と文句を言ってくる。

で、このバッチファイルをどうすればいいかというと…UTF-8(BOM無し)で保存する。内容は全く同じ、でもこっちじゃないと動かない。

そして、更に、このファイルをコマンドプロンプトでそのまま実行すればいいのか、というと…

コマンドプロンプトのコードページを切り替えないといけないんだな。じゃないとウムラウトなどは「半角カタカナ」になっちゃう。

chcp 65001

これでコマンドプロンプトの表示がUTF-8(BOM無し)になる。やっと作ったファイルが実行できる。

いやいや、なんとめんどくさい。

特に訳がわからないのが、dirコマンドで出力されるファイル名をリダイレクトしてファイルに流し込むとUTF-16LE(BOM無し)になるくせに、コマンドプロンプトのコードページは1200(UTF-16LE)に切り替えようとするとエラーになっちゃうもんだから65001(UTF-8)にせざるを得なくて、すると実行するためのバッチファイルの形式はUTF-8にしなくちゃいけない、と。

なんで統一してくれないんだろう。なんでcmd.exeを最初っからUTF-8にしてくれないんだろう。なんでdirコマンドはUTF-16を吐き出すんだろう。

まったくわからない。

でも、一応はやりたいことができるようになった。

0 件のコメント:

コメントを投稿