概要
一度実行したら自らを削除するバッチファイルの挙動について考察する.
どちらかといえば,筆者が気になったことの確認とその記録,という意味合いが強い.
詳細
次のようなバッチファイルを考える.
self-destruct.bat
chcp 65001
echo このバッチファイルは5秒後に消去されます
powershell sleep 5
del /Q "C:\Users\denkiuo604\self-destruct.bat"
この self-destruct.bat
を実行すると,実行開始から5秒後に,実行終了とともに self-destruct.bat
が削除される.
問題
次のバッチファイル self-destruct-log.bat
を実行したとき,ファイル self-destruct.log
は生成されるか.
self-destruct-log.bat
chcp 65001
echo このバッチファイルは5秒後に消去されます
powershell sleep 5
del /Q "C:\Users\denkiuo604\self-destruct-log.bat"
echo 実行ログを出力しました.バッチは5秒後に終了します. > "C:\Users\denkiuo604\self-destruct.log"
powershell sleep 5
解答
ファイル self-destruct.log
は生成されない.
del
コマンドが実行された時点でバッチは終了する.
ちなみに,del
コマンド実行後は (一瞬しか表示されないが) 次のような出力になる.
C:\Users\denkiuo604>del /Q "C:\Users\denkiuo604\self-destruct-log.bat"
The batch file cannot be found.
[プロセスはコード 1 (0x00000001) で終了しました]
このターミナルを Ctrl+D で閉じるか、Enter キーを押して再起動できます。