ドラッグ&ドロップで引数を渡してプログラムを実行するバッチファイル

実行したいプログラムのあるフォルダーに以下の様なバッチファイルを作成し、そのショートカットをデスクトップに作成。

1
2
3
4
cd /d %~dp0
実行したいプログラム %*
cd
pause

引数に渡すファイルをショートカットにドロップすることで、対象のプログラムに引数を渡して実行できる。

バッチパラメーター

バッチファイルのパラメーター処理は call /? で確認することができる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
C:\Users\<user>>call /?
バッチ プログラムを別のバッチ プログラムから呼び出します。

CALL [ドライブ:][パス]ファイル名 [バッチパラメーター]

バッチパラメーター バッチ プログラムで必要なコマンド ライン情報を指定します。

コマンド拡張機能を有効にすると、CALL は次のように変更されます:

CALL コマンドは、CALL のターゲットとしてラベルを受け付けるようになります。
構文は、次のとおりです:

CALL :ラベル 引数

指定された引数で新しいバッチ ファイル コンテキストが作成され、指定
されたラベルの次の文に制御が渡されます。バッチ スクリプト ファイルの
最後に 2 回到達することによって、2 回 "終了" する必要があります。
1 回目に最後に到達したときには、制御は CALL 文の次の行に返されます。
2 回目に、バッチ スクリプトが終了します。バッチ スクリプトから "戻る"
ための GOTO :EOF 拡張機能の説明については、GOTO /? と入力してください。

また、バッチ スクリプトの引数参照 (%0、%1 など) の展開は、次のように
変更されました:


%* バッチ スクリプト内では、すべての引数 (%1、%2、%3、%4、
%5 など) を参照します。

バッチ パラメーター (%n) の置換は拡張されました。次のオプション構文
を使うことができます:

%~1 - すべての引用句 (") を削除して、%1 を展開します。
%~f1 - %1 を完全修飾パス名に展開します。
%~d1 - %1 をドライブ文字だけに展開します。
%~p1 - %1 をパスだけに展開します。
%~n1 - %1 をファイル名だけに展開します。
%~x1 - %1 をファイル拡張子だけに展開します。
%~s1 - 展開されたパスは、短い名前だけを含みます。
%~a1 - %1 をファイル属性に展開します。
%~t1 - %1 をファイルの日付/時刻に展開します。
%~z1 - %1 をファイルのサイズに展開します。
%~$PATH:1 - PATH 環境変数に指定されているディレクトリを検索し、
最初に見つかった完全修飾名に %1 を展開します。
環境変数名が定義されていない場合、または
検索してもファイルが見つからなかった場合は、
この修飾子を指定すると空の文字列に展開されます。

修飾子を組み合わせて、複合結果を得ることもできます:

%~dp1 - %1 をドライブ文字とパスだけに展開します。
%~nx1 - %1 をファイル名と拡張子だけに展開します。
%~dp$PATH:1 - PATH 環境変数に指定されているディレクトリを
検索して %1 を探し、最初に見つかったファイル
のドライブ文字とパスだけに展開します。
%~ftza1 - %1 を DIR の出力行のように展開します。

上の例の %1 と PATH は、他の有効な値で置き換えることができ
ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
は %* と同時には使用できません。

バッチファイルの挙動

ドラッグ元とドロップ先のパスを展開する

%0 にはドロップされるバッチファイルのフルパス、%1 にはドロップするファイルのフルパスが入る。
%~dp0 にはバッチファイルの存在するフォルダーのフルパス、%~dp1 はドロップするファイルのフルパスが入る。

1
2
3
4
5
echo %0
echo %~dp0
echo %1
echo %~dp1
pause
1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\<USER>\Desktop>echo "C:\Users\<USER>\Desktop\test.bat"
"C:\Users\<USER>\Desktop\test.bat"

C:\Users\<USER>\Desktop>echo C:\Users\<USER>\Desktop\
C:\Users\<USER>\Desktop\

C:\Users\<USER>\Desktop>echo C:\Users\<USER>\Desktop\test.txt
C:\Users\<USER>\Desktop\test.txt

C:\Users\<USER>\Desktop>echo C:\Users\<USER>\Desktop\
C:\Users\<USER>\Desktop\

C:\Users\<USER>\Desktop>pause
続行するには何かキーを押してください . . .

ドロップ先のパスに移動してから実行する

%~dp0 でドロップ先のフォルダーに移動する。
%*%1 以降のパラメーターを示している。

1
2
3
4
cd /d %~dp0
echo %*
cd
pause
1
2
3
4
5
6
7
8
9
10
C:\Users\<USER>\Desktop>cd /d C:\Users\<USER>\Desktop\

C:\Users\<USER>\Desktop>echo C:\Users\<USER>\Desktop\test.txt
C:\Users\<USER>\Desktop\test.txt

C:\Users\<USER>\Desktop>cd
C:\Users\<USER>\Desktop

C:\Users\<USER>\Desktop>pause
続行するには何かキーを押してください . . .

バッチファイルのショートカットにドロップした場合

バッチファイルがC:\workにあり、デスクトップ上に作成したショートカットへドロップした場合。
%0 はバッチファイルの場所を指す。

1
2
3
4
5
6
7
8
9
10
C:\work>cd /d C:\work\

C:\work>echo C:\Users\<USER>\Desktop\test.txt
C:\Users\<USER>\Desktop\test.txt

C:\work>cd
C:\work

C:\work>pause
続行するには何かキーを押してください . . .