Perlスクリプトをダブルクリックで実行したいなぁ、と思いついて、Windowsのバッチファイルの使い方を調べてみた。*1 *2


何でバッチファイルを使おうと思ったかというと、

cygwin の shell を経由せずに実行できるのかなぁ。

そういや cygwin の shell はどうやってるんだ?

うわ、バッチファイルじゃん。しかも、

@echo off

C:
chdir C:\cygwin\bin

bash --login -i

だけだし。

で、これちょっと変えたら、使えるかな、と思ったわけで。


とりあえずぐぐって、ここら辺(http://forum.nifty.com/fpcu/dosvcmd/batch.htm)参照。
XPだと、GUIのヘルプがあるそうなんだけど、見方がよくわからん。
「スタート」から、「ヘルプとサポート」を開いて、「コマンドラインリファレンス」と検索した結果を出してから、"「コマンドラインリファレンス」"をクリックすると、たどり着けた。んだけど、これもっといい見方ないのかなぁ。わかりずらすぎ。めんどいので、お気に入りに追加しときましたよ。*3


で、作ってみたバッチファイル。

@echo off

echo perl %~n0
echo.

C:\cygwin\bin\perl %~n0

echo.
echo 終了しましたよ。
pause

perlスクリプトのファイル名(拡張子付き)に、.cmdを付けたファイル名にする。"%~n0"ってのは、%0がバッチファイルのファイル名を表していて、~nでファイル名(.cmd抜き)を取り出してる。

最後の"pause"で、すぐに終了しないようにしてる。何かキーを押して終了。出力を見なくていいようなスクリプトだと要らない感じ。

いっぱいでてる"echo"は、最初の"@echo off"で、各コマンドを表示しないようにしてる。行頭の"@"は、このコマンド自体を出力しないように。"echo."は、空行表示。"echo ."とかやったら、普通に"."が出力されてた。

.batだと「MS-DOS バッチ ファイル」で、.cmdだと「Windows NT コマンド スクリプト」になってる。何か違うのかなぁ。なんとなく.cmdで。*4


perlのパスはwindows風に。
どうも、"/usr/bin/"は、"C:\cygwin\bin\"にあるらしい。"C:\cygwin\usr\bin\"は空だった。
cygwinのシェルから起動する時との違いは、ここら辺と、あと環境変数あたりだと思う、思う。
cygwinがよくわからん。cygwinのシェルを使えば問題ないんだけど。試しにperl.exeだけコピーして実行してみたら、いろいろとdllを要求されて、

  • cygperl5_8.dll
  • cygcrypt-0.dll
  • cygwin1.dll

もコピーしてきたら、動いた。cygwinインストールしてないPCで実行してないんでわかんないけど、これだけでperlが動くのかなぁ。素直にActivePerlとか使え、って気もするけど。


結論。
直接.plか.plxにperlを関連付けしちゃえばいいじゃん。(ぉ

*1:具体的には、http://d.hatena.ne.jp/kou21058/20051111/p1ですな。これをダブルクリックでダウンロードできるように、と。今までは、cygwin起動して、スクリプトディレクトリまで移動してから、実行、とかやってた。

*2:Windowsの」とか言ってるけど、他は知らん。Macでもなんかあるんだっけか。

*3:ちょっと多めなので、あとで詳しく読もうかと。WSHってのがちょっと気になる。Perlでも使えるらしい。http://e-words.jp/w/WSH.html

*4:あと、なんとなく小文字で。