自爆するバッチファイルの作り方です。自分自身のパスの書き方についても解説しています。
場合によっては次のほうが簡単に書けます。
この2つの違いは次で説明します。
†:ダブルクリックで実行したときは、ダブルクオーテーション付きのフルパスになります。別のバッチファイルやコマンドラインから実行した場合は、実行時に指定した形になります。
文字を組み合わせて使うこともできます。例えば、%~nx0 で拡張子付きのファイル名を表せます。%~dpnx0 で %~f0 と同じ意味になります。
この変数の使い方は call 文のヘルプで説明されています。以下、call /? の実行結果から一部引用。
コマンド
自分を消すコマンドは次の通りです。del "%~f0"
場合によっては次のほうが簡単に書けます。
del %0
この2つの違いは次で説明します。
自分自身を表す変数について
自分自身を表す変数(?)は次のようになっています。変数 | 説明 | 例 |
---|---|---|
%0 | バッチファイル実行時に指定された形† | "C:\foo\bar\test.bat" など |
%~0 | バッチファイル実行時に指定された形†(引用符なし) | C:\foo\bar\test.bat など |
%~f0 | フルパス | C:\foo\bar\test.bat |
%~d0 | ドライブ | C: |
%~p0 | パス | \foo\bar\ |
%~n0 | ファイル名 | test |
%~x0 | 拡張子 | .bat |
†:ダブルクリックで実行したときは、ダブルクオーテーション付きのフルパスになります。別のバッチファイルやコマンドラインから実行した場合は、実行時に指定した形になります。
文字を組み合わせて使うこともできます。例えば、%~nx0 で拡張子付きのファイル名を表せます。%~dpnx0 で %~f0 と同じ意味になります。
この変数の使い方は call 文のヘルプで説明されています。以下、call /? の実行結果から一部引用。
また、バッチ スクリプトの引数参照 (%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 は、他の有効な値で置き換えることができ ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子 は %* と同時には使用できません。
コメント