バッチファイルに自分自身を削除させることは可能ですか?
私はそれを削除するために別のファイルを実行させようとしましたが、これはうまくいきませんでした。使用しているバッチファイルは昇格しています。私のOSはWindows 7 32ビットです。
npocmakaの答えは機能しますが、次のエラーメッセージが生成されます。 "バッチファイルが見つかりません。 「これは、スクリプトが終了したときにコンソールウィンドウが閉じた場合は問題ではありません。メッセージが非常に速く点滅するため、誰にも表示されません。ただし、スクリプトの終了後にコンソールが開いたままになっている場合は、非常に望ましくありません。
エラーメッセージなしでファイルを削除する秘Theは、スクリプトの終了後に別の隠しプロセスを取得してファイルを削除することです。これは、削除プロセスを開始するためにSTART/Bを使用して簡単に実行できます。削除プロセスの開始と実行には時間がかかるため、親スクリプトは削除が行われる前に正常に終了する可能性があります。
start /b "" cmd /c del "%~f0"&exit /b
SHIFTが%0
値を破壊することが心配な場合は、単にCALLedサブルーチンを使用できます。
call :deleteSelf&exit /b
:deleteSelf
start /b "" cmd /c del "%~f0"&exit /b
2015-07-16を更新
エラーメッセージを生成せずにバッチスクリプトを自動的に削除する別の非常に巧妙な方法を発見しました。この手法は、英語で http://www.dostips.com/forum/viewtopic.php?f=3&t=6491 で説明されているGOTO(ロシア人によって発見された)の新たに発見された動作に依存します。
要約すると、(GOTO) 2>NUL
はEXIT /B
と同じように動作しますが、呼び出し元のコンテキストで連結コマンドを実行できる点が異なります。
必要なのは
(goto) 2>nul & del "%~f0"
( del /q /f "%~f0" >nul 2>&1 & exit /b 0 )
これをスクリプトの最後に設定します。 (SHIFT
コマンドを使用すると動作しない場合があります)
del "%~f0"
動作しますが、以前に開いたコンソールから呼び出すとエラーメッセージが表示されます(ただし無視できます)。
del %0
ファイルの最後の行は、私が見つけた最も簡単な方法です。 %0
は、現在実行中の.cmd
ファイル。
最初に試してみたときに、「使用中のファイル」エラーが表示されると思っていましたが、まだ発生していません。
この質問 、(保留中)への答えとして、このバッチは3回実行すると自己破壊します。これを実現するためのコードは、最後の3行にまとめられています。 dbenhamの上記のヒント が組み込まれています
@Echo off
Rem batch main purpose
Rem
Rem
Set Tok=###&For /f %%C in ('find /C "%Tok%" ^<"%~f0"') Do Set /A Cnt=%%C
Echo Run-%Cnt%&If %Cnt% Geq 3 (goto) 2>nul & del "%~f0"
Echo %Tok%>>"%~f0"& Goto :Eof
バッチは、実行のたびにトークンを追加し、トークンの発生をカウントすることにより、自分自身を変更します。数に達すると、それ自体を削除します。
> Dir /B Kill*
KillMySelf.cmd
> KillMySelf.cmd
Run-1
> KillMySelf.cmd
Run-2
> KillMySelf.cmd
Run-3
> Dir /B Kill*
File Not Found
デスクトップ上の場合はdel (name)
を使用できます。それ以外の場合はdel (path to file ex. del C:\WINDOWS
。
P.Sはエラーメッセージを作成しません
バッチファイルの最終行としてdel%0
競合状態を回避するために遅延を設定できます。ここでは15秒です。
START /B CMD.EXE /D /C "PING.EXE -n 15 127.0.0.1 && DEL prova.bat"
ノート