自分自身を削除やフォルダごと削除させるバッチファイル
以前、保守の仕事でコマンドファイルを実行し、痕跡を残さないために最後に自身を削除するファイルを使用していたので、その記憶を辿ってみました。
実行したバッチファイル削除
コマンドファイルを実行し、実行した自分自身のコマンドファイルを削除(自爆)させる。
通常の場合は、バッチファイルの最後に
「del %0」を記載すれば、自爆してくれますが、まれに「del "%~f0"」が必要になる場合があります。
直接実行であれば、「%0」で大丈夫です。
del %0
ダブルクオーテーション付きになるのでパスに空白が含まれていても大丈夫です。
別のコマンドファイルからの実行など、実行した時のパス指定(フルパス指定ではない場合など)により、「%0」ではなく「"%~f0"」が必要になる場合があります。
del "%~f0"
「"%~f0"」は、「"%~dpnx0"」と同様です。
コピーを残しておくことをおススメします。
実行したフォルダごと削除
また、作業ファイルを含むフォルダごと削除(自爆)させることもあります。
作業フォルダ「job-folder」↓
自身のフォルダごと削除するのは、ファイル自爆に比べると少し複雑になります。
内部からフォルダ削除を実行しようとするとフォルダが削除出来ず残ってしまいます。
(ファイルのみ削除されるようです。)
当時使用していたのは、
一旦、フォルダ削除を実行させるコマンドファイルを外に出して、外からフォルダを削除させ、最後に自分自身を削除(自爆)させます。
他にも便利な方法があるような気がするのですが…
参照
例】
作業フォルダ名 「job-folder」
作業実行コマンドファイル 「フォルダ内 job.cmd」
@echo off
rem -----job-folderに移動-----
cd /d "%~dp0"
rem ------ここまで実行するコマンド記述します。-------
rem -----削除実行ファイルを親ディレクトリにコピー-----
copy rmdir.cmd ..\rd.cmd
rem ------親ディレクトリのファイルを実行-------
..\rd.cmd
exit
例】
削除実行コマンドファイル 「作業フォルダ内 rmdir.cmd → 親ディレクトリ rd.cmd」
@echo off
rem -----親ディレクトリに移動-----
cd ..
rem cd "%~dp0" (これでもOK)
rem -----job-folderを削除-----
rd /s /q job-folder
rem rd /s /q "%~dp0job-folder" (これでもOK)
rem -----このファイルを削除-----
del "%~f0"
rem del %0 (..\rd.cmdとなりNG)
exit
参考にアレンジしてください。
実行テストの場合、ゴミ箱に入らずいきなり消えてなくなるので、くれぐれもコピーを作成しておくことをおススメします。
実行テストなどでは注意して下さい。
ゴミ箱に入らずいきなり削除されるので消えてなくなります。