web-dev-qa-db-ja.com

完了後に.BATファイルを自己削除する方法は?

完了後に.BATファイルを自己削除する方法は?プロセスを終了する単純なbatファイルがあります。その.BATファイルに自分自身を削除させたい。

28
Rella
@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 を参照してそれを取り除きます。

33

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>NULEXIT /B、ただし、呼び出し元のコンテキストで連結されたコマンドの実行を許可する場合を除きます。

必要なのは

(goto) 2>nul & del "%~f0"
42
dbenham

OSについては言及しませんでしたが、これがWindowsの場合XP Professionalで適切な権限がある場合、バッチファイルにWindowsのワンショットタスクをスケジュールしてファイルを削除させることができます文書化されたhereschtasksコマンドを使用します。

そうしないと、通常、実行中のファイルを削除できません。これは、あらゆる種類の厄介さの可能性があるためです。さらに、使用中の実行可能ファイルを削除しようとすることは、多くのウイルス対策プログラムによって非常に疑わしい動作と見なされているため、これらのプログラムを同時に実行する可能性があります。

4
John Feminella

このコマンドをバッチファイルの最後の行に追加するだけです

Del batch_file_name.bat

batch_file_name.batは、バッチファイルの名前です。

乾杯

1
Hani Ludin

@ 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"

これにより、バッチファイルが削除される前に非表示になり、エラーメッセージが表示されなくなります。

0
Jason Towan

DEL "%〜f0"の出力をNULL出力に向けることもできます。

@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0" > NUL
0
Chad Estes