自爆するバッチファイルの作り方です。自分自身のパスの書き方についても解説しています。

コマンド

自分を消すコマンドは次の通りです。
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 は、他の有効な値で置き換えることができ
    ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
    は %* と同時には使用できません。


参考



一言

「バッチファイル 自分 削除」と検索すると、コマンド自体は見つけられるのだが、肝腎の説明が載っていないので困っていた。しかし「バッチファイル 自分自身」と検索すれば、ちゃんと変数の意味が説明されているウェブページを発見することができた。こういうのが「ググる力」なのだなと再実感した。