ファイル名を小文字にするバッチファイルについて(備忘録)

デジカメなんかが自動でつけるファイル名は、大文字で名前をつけてくれるのですが、DreamWeaverで画像を貼りこむ時に、いいかげん数が多いと癪に触るので、バッチ処理で前処理することにしました。こうゆうバッチファイルは大抵誰ががすでに作ってくれているものなので、検索して見つけました。そのままバッチファイルとして保存して使えば、なんら問題は無いんでしょうが、書いてあるスクリプトの内容をやっぱり理解した上で使いたいと思うのは人情です。

参考サイト
http://blog.noris.today/?p=372

googleなどで「ファイル名 小文字 変換」とかやるとでてきますね。

で、普段バッチファイルなんかは書かない人が、いきなりこうゆう文を読むとつまづいてしまいます。

FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%

前文の
SET STR=%STR:A=a%

までは、素直に分かる。が、SET STR=%%STR:%%I=%%I%%
のところが、バッチファイルのルールを知らないので「???」となりましたので、備忘録を書いておこうかと思います。

★以下、分かってなかったポイント。
(1) ^ 記号。…正規表現?とか暫く思ってましたが、よくよく考えるとこれはプロンプト文ですので、改行がはいるけどコマンドとしては連続してるよとの意味だった。以下のサイトに説明あり。
(参考サイト)http://pf-j.sakura.ne.jp/program/dos/doscmd/str_circumflex.htm

(2) batファイル全体の構文ルールがそもそもよく分かってないので、ざっと把握したいという…バッチファイル書かないから(;´Д`)そこからだよね。やっぱし。
(参考サイト)http://qiita.com/sksmnagisa/items/8c4c1788af44cc1dc63a
こちらのサイトの覚書、ざっと読むだけでも大掴みで理解できるのでとても助かります( ^ω^ )

(2.5) for文中の、%%I とか。これは、気持ち悪い書き方だけどエスケープ文字がfor文中の変数にはくっつくという説明を読んで理解した。だが、やっぱりなんか嫌。

しかし、for文のところはまだしっくりこない。

(3)SET STR=%STR:A=a% とSET STR=%%STR:%%I=%%I%% がしっくりくるには…
これが、他の言語でいうところのエスケープシーケンスのルールを単純に当てはめると、
後者の中から、エスケープ文字にあたるところを除くと、
SET STR=%STR:%I=%I% となる。これで正しい。最前列と最後尾の%はここでは、無視して、中身を比較する。STR:A=a と STR:%I=%I ここが、ルールを知らないとつまづいてしまう。

前者の解釈では、大文字のAを見つけたら小文字のaに差し替えて、STRに格納するという意味だが、
%I=%Iだと、おんなじものを差し替えてるように見えてしまう。で、初めてみると「???」になった訳ですが、ここには、こうゆうルールがあるのを見つけてきた。

(参考サイト)http://qiita.com/q1701/items/d81e51a64f41ca841da6
このサイトの中程あたりの文章に、「大文字、小文字に変換する」というセクションがある。そこには、

(以下引用)———————————————————
%変数:置換元文字列=置換先文字列% を使う。
置換元文字列の大文字・小文字は区別されないので、以下の動作となる。

%ENV:A=A% ・・・ a または A → A
%ENV:a=a% ・・・ a または A → a

——————————————————————
このルールを知ってれば、ここでやっと納得できるようになる。

確認すると、STRという変数には、対象フォルダにある(処理中の1つの)ファイル名が入っており、
%I=%I も上のルールに従って書き換えると、inで指定されているパターンは全て小文字なので、例えば、a=a という下のケースの書き方に置き換えられる。これで「(%ENVの中身に)a または A(を見つけたら)」だったら、「a」にするという解釈が成立する。

「置換元文字列の大文字・小文字は区別されない」というルールを知らないと「???」となりがちなバッチ処理についてでした。

コメント

タイトルとURLをコピーしました