Tips

#nofollow #norelated

Windows系の何か役に立ちそうなことの備忘録

微妙に役立つことがあるかもしれないので備忘録として残してあるメモです。


バッチの引数の情報を取得

  • 該当するファイルが存在しない場合でもエラーにはならず、空文字が取得されます。
    %~1 基本的には %1 と同等ですけど、囲んでいる二重引用符がある場合はそれを取り除きます。
    %~f1 Fix 現在のフォルダを基本として、ドライブ名も含めた絶対パスに変換します。
    %~d1 Drive ドライブ名を取得します。ドライブ名が含まれない場合や、何も指定しない場合は、現在位置のドライブ名が取得できます。
    %~p1 Path パスのうち、フォルダ部分のみを取得します。取得されるフォルダ部分は、引数に与えられた部分のみではなく、絶対パスから算出されます。ドライブ名は含まれず "\" から始まります。また、末尾も "\" となります。相対パス指定でルートフォルダを越えてしまった場合も "\" が取得できました。
    %~n1 Name ファイル名の、名前の部分のみを取得します。"\" で終わる、すなわちディレクトリ名のみの場合や、"." から始まる拡張子名だけの場合は、空文字が取得されます。
    %~x1 eXtension ファイル名の、拡張子の部分を取得します。拡張子の指定がない場合は空文字が取得されます。なお、取得される拡張子名の先頭には "." が含まれます。
    %~s1 Short name 全体をショートネームに置き換えます。ショートネームとは、昔、空白を含まない 8 文字までしか指定できないころのファイルやディレクトリにつけられていた名前です。既存のファイルに対応したショートネームが取得されますが、存在しない場合はそこだけ 8 文字以上や空白を含んだ文字列のままとなります。
    %~a1 Attribute 指定されたものをファイルまたはフォルダとみたてて、その属性を取得します。"\" が最後になくても、その名前のフォルダが存在した場合にはそのフォルダの属性が取得できます。また、確認した環境 (Windows Server 2003) では、ファイル名の最後に "\" をつけてみても、そのファイルの属性を取得することが出来ました。
    %~t1 Time 指定されたものをファイルまたはフォルダとみたてて、その日付を取得します。細かい振る舞いは %~a のときと同じでした。
    %~z1 siZe 指定されたものをファイルとみたてて、そのサイズを取得します。ディレクトリを指定すると 0 が返ってくるようです。他の細かい振る舞いは %~a のときと同じでした。
    %~$PATH:1 PATH 指定したファイルが、環境変数 PATH で定義されたフォルダ内に存在するかどうかを探し、あった場合はドライブ名も含めたフルパスで取得します。PATH 環境変数に指定されていなければ、カレントディレクトリは探しません。また、みつからない場合は空文字です。なお、PATH のところをそのほかの環境変数名にしてみても、その環境変数に指定されたディレクトリ内から見つけてくれるようでした。

  • 実行しているフォルダは C:\temp\work-folder であるとします。
    2番目の引数について情報を取得しています。
    修飾子 引数の値 変換後の値
    %~2 test-argument test-argument
    "test argument" test argument
    %~f2 test.bat C:\temp\work-folder\test.bat
    ..\test.txt C:\temp\test.txt
    %~d2 test.bat C:
    D:\temp D:
    %~p2 test.bat \temp\work-folder\
    ..\..\test.txt \
    %~n2 test.bat test
    %~x2 test.bat .bat
    %~s2 long-filename.txtfile ファイルがある場合 C:\temp\WORK-F~1\LONG-F~1.TXT
    ファイルがない場合 C:\temp\WORK-F~1\long-filename.txtfile
    %~a2 test.bat --a------
    %~t2 test.bat 2004/05/11 02:06
    %~z2 test.bat 177
    %~$PATH:2 notepad.exe C:\WINNT\system32\notepad.exe
  • 上記のうちいくつかはまとめて利用することが出来る
    %~dp3 %~d3 と %~p3 の組み合わせです。フォルダ名だけでなく、ドライブ名も一緒に取得したい場合に便利です。
    %~nx3 %~n3 と %~x3 の組み合わせです。ファイル名と拡張子の両方を取得したい場合に便利です。
    %~dp$PATH:3 %~$PATH:3 で見つけたファイルの、ドライブ名とフォルダ名を取得します。そのファイルがどのフォルダにあったかを知りたいときに便利です。
    %~ftza3 %~f3 と %~t3 と %~z3 と %~a3 の組み合わせです。dir コマンドを実行したときのような値を取得できます。

最終更新:2009年04月22日 00:02