dsegの日記: すごいぞ、CMD.EXEのForコマンド 5
日記 by
dseg
MLに、「foo.pdfというファイルを、foo.swfにコンバートしたい。
あるディレクトリの階層下にある全てのPDFをコンバートしたい。
ファイルは100個以上あるんだけど、どうしたらいいか?」
(※使用しているOSは当初は書いていなかったが、2000かXPだったようだ)
…という質問が来たので、昼休みにちょっと考えていた。
そういえば昔書いたWSHのスクリプトがあったよな~、
と思って見てみたら100行位ある。
うーん…。
あるPDFをSWFに変換するには、"pdf2swf"を使って、
> pdf2swf foo.pdf -o foo.swf
とすればよい。
pdf2swfはシェルグロプを処理してくれないので、
> pdf2swf *.pdf
としてもエラーになってしまうから、
100個のPDFをSWFにするには、100回先ほどのコマンドを発行しなければならない。
結局そのWSHスクリプトをMLにポストしたが、
模範解答は、なんとたったの一行だったようだ。
(正解はコメントにて…)
悲しいなあ。悲しいなったら悲しいな~あ。はあっ。
これ、*nixのfindコマンドだと、どう書けるんだろう、とちょっと試したが、失敗した。はああぁぁ。
正解 (スコア:1)
; cd c:\pdf とする。
に展開され、
結果これでディレクトリ以下の全てのPDFがコンバートされる。
コマンド名やオプションを入れ替えれば、変換系のタスクには汎用的に使えそうだ。
# オプションは豊富にそろっている
FORコマンドの詳細は、コマンドプロンプトを開いて
> FOR /?
とするとすごい量のヘルプが出てくる。
しかし、FORコマンドはすごいな。
Re:正解 (スコア:1)
・・・拡張されたやつは、ですが。
#9X系では使えないはず
まぁ使いこなすのは大変そうですが。
Re:正解 (スコア:1)
CMD.EXEはいろいろ拡張されてますね。ちょっと驚きました。
9x系のcommand.comにも拡張構文があったらいろいろ使えたのに…と残念です。
環境に依存するバッチファイルは、なかなか、なかなか…。
Re:正解 (スコア:1)
ファイル名の置換もできるんですねぇ…知らなかった
(DOSの頃はできなかったような)
FOR /? を覚えておこっと
書式からすると CMD.EXE の FOR は
*nix だと find よりも shとかbashの for 文相当じゃないかな
同じことをやろうとすると
for infile in *.pdf ; do pdf2swf $infile -o ${infile%%.pdf}.swf ; done
な感じ
Re:正解 (スコア:1)
勉強になります!
# オライリーの魚本読み直しますっ。