web-dev-qa-db-fra.com

Comment faire pour supprimer automatiquement le fichier .BAT?

Comment faire pour supprimer automatiquement le fichier .BAT? J'ai un simple fichier bat qui met fin à un processus. Je veux que ce fichier .BAT se supprime.

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"

Notez que la ligne DEL est la dernière chose que vous avez l'intention d'exécuter dans le fichier de commandes, sinon vous n'avez pas de chance :)

Cela affichera un message d'erreur laid, mais il est bénin, et le code est légèrement moins confus de cette façon. Si vous vous souciez beaucoup de vous débarrasser du message d'erreur, consultez réponse de dbenham pour vous en débarrasser.

33

La réponse Merlyn Morgan-Graham parvient à supprimer le script batch en cours d'exécution, mais elle génère le message d'erreur suivant: " Le fichier batch est introuvable. "Ce n'est pas un problème si la fenêtre de la console se ferme à la fin du script, car le message clignotera si vite que personne ne le verra. Mais le message d'erreur est très indésirable si la console reste ouverte après la fin du script.

John Faminella a la bonne idée qu'un autre processus est nécessaire pour supprimer proprement le fichier de commandes sans erreur. La planification d'une tâche peut fonctionner, mais il existe un moyen plus simple: utilisez START pour lancer un nouveau processus de suppression dans la même console. Il faut du temps pour que le processus soit lancé et exécuté, de sorte que le script parent a une chance de se terminer proprement avant que la suppression ne se produise.

start /b "" cmd /c del "%~f0"&exit /b

Mise à jour 2015-07-16

J'ai découvert une autre façon très simple de supprimer un script batch sans générer de message d'erreur. La technique dépend d'un comportement récemment découvert de GOTO (découvert par certains Russes), décrit en anglais à http://www.dostips.com/forum/viewtopic.php?f=3&t=6491

En résumé, (GOTO) 2>NUL se comporte comme EXIT /B, sauf qu'il permet l'exécution de commandes concaténées dans le contexte de l'appelant!

Tout ce dont vous avez besoin est

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

Vous n'avez pas mentionné le système d'exploitation, mais s'il s'agit de Windows XP Professional et que vous disposez des autorisations appropriées, vous pouvez demander au fichier de commandes de planifier une tâche planifiée Windows ponctuelle pour supprimer le fichier à une date ultérieure. Utilisez la commande schtasks, documentée ici.

Sinon, vous ne pouvez généralement pas supprimer un fichier en cours d'exécution, car cela peut entraîner toutes sortes de méchancetés. De plus, essayer de supprimer un exécutable en cours d'utilisation est considéré comme un comportement très suspect par un certain nombre de programmes antivirus, il est donc probable que vous les exécutiez également.

4
John Feminella

Ajoutez simplement cette commande à la dernière ligne de votre fichier batch

Del batch_file_name.bat

batch_file_name.bat est le nom de votre fichier batch

À votre santé

1
Hani Ludin

vous pourriez faire @ aslyn de Merlyn

@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0"

Maintenant, faites un vbscript avec ce codage et enregistrez-le en tant que hidden.vbs, ce vbscript masquera la fenêtre du fichier de commandes.

set w = CreateObject(“WScript.Shell”)
W.Run chr(34) & “%userprofile%\desktop\the_batch_file.bat” & chr(34), 0
set w= Nothing

Demandez ensuite au fichier de commandes d'exécuter ce vbscript

@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
start "path to hidden.vbs"
DEL "%~f0"

Cela masquera le fichier de commandes avant de le supprimer, rendant le message d'erreur impossible à voir.

0
Jason Towan

Vous pouvez également diriger la sortie du DEL "% ~ f0" vers la sortie NULL comme ceci ...

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