本日の成果:GetSpecialFolderPath.bat を作った
私はWindowsのコマンドプロンプトのバッチファイルをかなりヘビーに使い倒してる方だと思います。バッチファイルは私はMSX-DOSの頃から使ってました。MSX-DOSでは単に順番にコマンドを実行する(たまに一時停止する)くらいの機能しかないのですが、MS-DOSでは環境変数やERRORLEVELを使った制御もでき、Windows NTからはcommand.comでなくcmd.exeになってまた大幅に拡張され、その後Windowsのバージョンアップに伴って少しづつ機能が増えたり仕様変更されたりしているようです。
ただ、そういう屋上屋の歴史の結果として例によって仕様が破綻してまして、やや複雑なことをやろうとすると仕様なのかバグなのか判らない謎の挙動を示したりします。個人的にはバッチファイルはかなり上手く行っていない方ではないかと、ややこしいバッチファイルを作る度に思います。UNIXと違ってプログラムのパラメータは1個の文字列として渡されるだけで、切り分けはプログラム側で行わなければならない、ということがさらに話をややこしくしていると思います。
まぁその辺も踏まえて出してきたのがWindows Script HostとかWindows PowerShellだと思うんですが、それらは古い環境だと入ってなかったりするんですよね・・・。
話が逸れました。バッチファイルを作る話でした。バッチファイル内では環境変数でWindowsのシステムディレクトリとかProgram Filesとかの位置を知ることができますが、その類の全部環境変数に入ってるわけではないので、例えばスタートメニューやSendToの位置は判らないのです。そして悪いことにそれらの位置はWindowsのバージョンによって異なるうえに、その手のツールを使えば任意のフォルダに設定できたりするので、バッチファイルからそれらをアクセスしようとすると、本来やりたい処理よりも操作する先のディレクトリを決めることの方が大変なくらいでした。
しょうがないのでその辺を楽にするバッチファイルを作りました。バッチファイルなのでWindows 2000以降ぐらいなら多分どこでも動きます! しかし、中身は実はRubyスクリプトなので、パスの通ったディレクトリにruby.exeが必要です!! (ダメじゃん)
バッチファイルなので、他のバッチファイルから呼び出すときは、callコマンドと組み合わせて使います。
call GetSpecialFolderPath CSIDL_STARTMENU
などとすると、スタートメニューのパスを標準出力に出力します。
call GetSpecialFolderPath CSIDL_STARTMENU STARTMENU
などと、2つ目のパラメータを与えると、環境変数(この例では%STARTMENU%)に結果を格納します。
コメントを残す