人気ブログランキング | 話題のタグを見る
バッチファイルでコマンドライン引数(パラメタ)を参照する

バッチファイルで、実行時のコマンドライン引数(パラメータ)を取得する方法です。

%1 で引数一つ目、%2 で引数二つ目という感じで取得できます。
%* とすると、全ての引数を取得できます。
%0 とすると、実行したコマンド文字列自体を取得できます。


で、この引数ですが修飾子を付けることで目的の文字列にできるようです。
代表的に下記のような修飾子があるようです。(下記は一番の引数を対象にした場合)
%~1 : 二重引用符(")で囲んでいる場合、それを除去する
%~f1 : 絶対パスに変換。
%~d1 : ドライブ名取得
%~p1 : フォルダ部分のパス取得。
%~n1 : ファイル名取得。
%~x1 : 拡張子取得。
%~t1 : ファイルの日付・時刻に展開。
%~z1 : ファイルサイズ取得。
これらの修飾子は組み合わせることも可能です。
(例えば、こちらの記事のコメントと追記で書いている %^dp0 はコマンド自体(%0)にバッチファイルのフルパスが入るので、それのフォルダパスを取得して、カレントディレクトリにしましょ ということになるようです。)
その他の修飾子はEZ-NET: Windows コンソール プログラミング - バッチファイルの引数を操作するコマンドプロンプトを使ってみよう! -バッチファイルとは?が参考になります。

補足ですが、%0 にバッチファイルのパスが入っていることを利用してバッチの起動ファイルパス、起動ディレクトリを表示することも可能です。
例えば下記のようなバッチとします。

@echo off
echo 実行したバッチのパス表示(バッチファイル名含む)
echo %~f0
echo 実行したバッチのパス表示(バッチファイル名含ない)
echo
%~d0%~p0
pause

バッチファイルを D:\test\a.bat に保存して実行すると結果はこうなります。

実行したバッチのパス表示(バッチファイル名含む)
D:\test\aaaa.bat
実行したバッチのパス表示(バッチファイル名含ない)
D:\test\

また、バッチファイルを \\server01\test\a.bat に保存して実行すると結果はこうなります。

実行したバッチのパス表示(バッチファイル名含む)
\\server01\test\aaaa.bat
実行したバッチのパス表示(バッチファイル名含ない)
\\server01\test\


ちなみに、%ERRORLEVEL% とすると、直前のコマンドの返り値を取得できることは、ここでも書いてます。
(ダブルクォーテーションの中で書いても展開してくれるようですね。)

参考:
バッチメモ(Hishidama's bat-file Memo)
by jehoshaphat | 2010-10-23 10:01 | 豆知識


<< (.Net)アプリケーションの... xcacls.vbsを使って詳... >>