プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windows、バッチファイル(.bat)に引数を渡す
結論から書きますね。

引数を渡す方は、バッチファイル名に続けて半角スペース区切りで指定します。
コマンドプロンプト上から起動するときは

test.bat param1 param2

のような形で、別のバッチファイルから起動するときは「call」コマンドを使って

call test.bat param1 param2

のような形です。

受け取る方は「%1」のように「%+数字」で取得できます。

「%0」にはバッチファイルの名前が入るので、引数自体は「%1」から始まります。
1つ目のパラメータは「%1」、2つ目のパラメータは「%2」といった調子ですね。

例えばこんなバッチファイルを用意してφ(--)

■C:\test_dir\test.bat
@echo off

echo %%0=%0
echo %%1=%1
echo %%2=%2

pause

コマンドライン上からこんな呼び出し方をするとφ(--)

C:\test_dir\test.bat param1 param2

私の環境ではこんな結果になりましたφ(--)

%0=C:\test_dir\test.bat
%1=param1
%2=param2
続行するには何かキーを押してください . . .

基本的な引数の受け渡し方は以上です(--)

基本的な受け渡し方は以上です……(--)


基本は以上です(-∀-)


それではちょっとだけ応用編に行きましょう。
基本的には引数は「%+数字」で受け渡しますが、特殊な指定方法もあります。
例えば「%~f1」でパスとファイル名を全部取得したり「%~n1」でファイル名だけ取得したり
引数がファイル名やパスのときに便利な指定の仕方があるのです。

特殊な指定の仕方を一覧にまとめると、大体こんな感じφ(--)

指定説明
%*パラメータをすべて
%~1パラメータを囲ってる"(ダブルクォーテーション)を削除
%~f1パスとファイル名を全部
%~d1ドライブ文字だけ
%~p1パスだけ。ドライブ文字も無し
%~n1ファイル名だけ
%~x1拡張子だけ
%~s1パスを省略表現
%~a1ファイルの属性だけ
%~t1ファイルの日付と時刻だけ
%~z1ファイルサイズだけ
%~$PATH:1環境変数「PATH」に指定されている場所を探して、同じ名前のファイルがあればパス付きで表示

数字の「1」の部分は対象とするパラメータによって変わります。

例えばこんなバッチファイルを用意してφ(--)

■C:\test_dir\test2.bat
@echo off

echo %%*:%*
echo %%~1:%~1
echo %%~f1:%~f1
echo %%~d1:%~d1
echo %%~p1:%~p1
echo %%~n1:%~n1
echo %%~x1:%~x1
echo %%~s1:%~s1
echo %%~a1:%~a1
echo %%~t1:%~t1
echo %%~z1:%~z1
echo %%~$PATH:1:%~$PATH:1
echo %%~$PATH:2:%~$PATH:2

pause

コマンドライン上からこんな呼び出し方をするとφ(--)

C:\test_dir\test2.bat "C:\Program Files\desktop.ini" "desktop.ini"

(私の環境では)こんな結果になりますよφ(--)

%*:"C:\Program Files\desktop.ini" "desktop.ini"
%~1:C:\Program Files\desktop.ini
%~f1:C:\Program Files\desktop.ini
%~d1:C:
%~p1:\Program Files\
%~n1:desktop
%~x1:.ini
%~s1:C:\PROGRA~1\desktop.ini
%~a1:--ahs----
%~t1:2009/07/14 13:54
%~z1:174
%~$PATH:1:C:\Program Files\desktop.ini
%~$PATH:2:C:\Windows\System32\desktop.ini
続行するには何かキーを押してください . . .

細かい部分は地道に見てください。

また、この特殊な指定は複数組み合わせて指定することも可能です。
「%~」+「指定」+「パラメータの位置」な並びで「指定」の部分に複数並べられるのです。

例えばこんなバッチファイルを用意してφ(--)

■C:\test_dir\test3.bat
@echo off

echo %%~nx1:%~nx1

pause

コマンドライン上からこんな呼び出し方をするとφ(--)

C:\test_dir\test3.bat "C:\Program Files\desktop.ini"

(私の環境では)こんな結果になりましたφ(--)

%~nx1:desktop.ini
続行するには何かキーを押してください . . .

ファイル名を取得する「%~n1」と拡張子だけ取得する「%~x1」が組み合わさって「%~nx1」になることで
「ファイル名+拡張子」が取得できるってな理屈です。

組み合わせるといろいろ便利なこともできるので、お試しくださいな。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事