完了後に.BATファイルを自己削除する方法は?プロセスを終了する単純なbatファイルがあります。その.BATファイルに自分自身を削除させたい。
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
ECHO "This script will now self-destruct. Please ignore the next error message"
DEL "%~f0"
DEL行は、バッチファイル内で最後に実行することをお勧めします。そうしないと、運が悪くなります:)
これはいエラーメッセージを出力しますが、それは良性であり、コードはこの方法を少し混乱させません。エラーメッセージを取り除くことに関心がある場合は、 dbenham's answer を参照してそれを取り除きます。
Merlyn Morgan-Grahamの回答は、実行中のバッチスクリプトを削除しますが、次のエラーメッセージを生成します。 "バッチファイルが見つかりません。 "スクリプトが終了したときにコンソールウィンドウが閉じても、メッセージは非常に速く点滅し、誰にも表示されないため、これは問題ではありません。ただし、スクリプトの終了後もコンソールが開いたままの場合、エラーメッセージは非常に望ましくありません。
John Faminellaは、エラーなしでバッチファイルをきれいに削除するには別のプロセスが必要であるという正しい考えを持っています。タスクのスケジューリングは機能しますが、より簡単な方法があります。STARTを使用して、同じコンソール内で新しい削除プロセスを起動します。プロセスの開始と実行には時間がかかるため、親スクリプトは削除が行われる前に正常に終了する可能性があります。
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"
OSについては言及しませんでしたが、これがWindowsの場合XP Professionalで適切な権限がある場合、バッチファイルにWindowsのワンショットタスクをスケジュールしてファイルを削除させることができます文書化されたhereschtasks
コマンドを使用します。
そうしないと、通常、実行中のファイルを削除できません。これは、あらゆる種類の厄介さの可能性があるためです。さらに、使用中の実行可能ファイルを削除しようとすることは、多くのウイルス対策プログラムによって非常に疑わしい動作と見なされているため、これらのプログラムを同時に実行する可能性があります。
このコマンドをバッチファイルの最後の行に追加するだけです
Del batch_file_name.bat
batch_file_name.bat
は、バッチファイルの名前です。
乾杯
@ Merlyn's aswerができます
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0"
このコーディングでvbscriptを作成し、hidden.vbsとして保存します。このvbscriptはバッチファイルのウィンドウを非表示にします。
set w = CreateObject(“WScript.Shell”)
W.Run chr(34) & “%userprofile%\desktop\the_batch_file.bat” & chr(34), 0
set w= Nothing
次に、バッチファイルでこのvbscriptを実行します
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
start "path to hidden.vbs"
DEL "%~f0"
これにより、バッチファイルが削除される前に非表示になり、エラーメッセージが表示されなくなります。
DEL "%〜f0"の出力をNULL出力に向けることもできます。
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0" > NUL