Comment faire pour qu'un fichier batch se supprime tout seul?
est-il possible de supprimer un fichier par lots?
j'ai essayé de le faire exécuter un autre fichier pour le supprimer, mais cela n'a pas fonctionné. Le fichier de commandes que j'utilise est élevée. Mon système D'exploitation est windows 7 32 bit.
8 réponses
la réponse de npocmaka fonctionne, mais elle génère le message d'erreur suivant: " le fichier batch ne peut pas être trouvé. " 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 il n'est pas souhaitable que la console reste ouverte après la fin du script.
L'astuce pour supprimer le fichier sans un message d'erreur est d'obtenir une autre processus caché pour supprimer le fichier après la fin du script. Cela peut facilement être fait en utilisant START /B pour lancer un processus de suppression. Il faut du temps pour que le processus de suppression démarre et s'exécute, donc le script parent a une chance de terminer proprement avant que la suppression ne se produise.
start /b "" cmd /c del "%~f0"&exit /b
vous pouvez simplement utiliser un sous-programme appelé si vous craignez que SHIFT détruise la valeur %0
.
call :deleteSelf&exit /b
:deleteSelf
start /b "" cmd /c del "%~f0"&exit /b
mise à Jour 2015-07-16
j'ai découvert une autre façon très astucieuse de faire supprimer un script par lot sans générer de message d'erreur. La technique dépend d'un comportement nouvellement 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 concaténées commandes dans le contexte de l'appelant!
donc tout ce dont vous avez besoin est
(goto) 2>nul & del "%~f0"
( del /q /f "%~f0" >nul 2>&1 & exit /b 0 )
met ceci à la fin du script. (peut ne pas fonctionner si la commande SHIFT
est utilisée)
del "%~f0"
fonctionnera, mais il y a un message d'erreur si vous l'appelez à partir d'une console précédemment ouverte (peut être ignoré cependant).
del %0
Comme la dernière ligne de ce fichier est la façon la plus simple que j'ai trouvé. %0
renvoie le nom du fichier .cmd
.
quand j'ai essayé pour la première fois, j'ai pensé que j'obtiendrais un "fichier en cours d'utilisation" erreur, mais cela ne s'est pas produit jusqu'à présent.
comme réponse à cette question , (qui est mise en attente) ce lot s'autodétruira après trois passages. Le code pour y parvenir est condensé dans les 3 dernières lignes. Il incorpore la pointe au-dessus de 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
le Lot se modifie en ajoutant un jeton après chaque passage et en comptant les occurences du jeton. Si le nombre est atteint, il supprime lui-même.
> Dir /B Kill*
KillMySelf.cmd
> KillMySelf.cmd
Run-1
> KillMySelf.cmd
Run-2
> KillMySelf.cmd
Run-3
> Dir /B Kill*
File Not Found
vous pouvez utiliser del (name)
si elle sur le bureau autrement utiliser del (path to file ex. del C:\WINDOWS
.
P. S ne fait pas d'Erreur msg
vous pouvez régler le délai pour éviter les conditions de course, voici 15 secondes:
START /B CMD.EXE /D /C "PING.EXE -n 15 127.0.0.1 && DEL prova.bat"
NOTES
- CMD.EXE /D Est obligatoire pour éviter l'exécution de crap-ware auto-run
- PING et la DEL doit être exécutée synchrone, donc entouré par des guillemets
- j'ai laissé aux utilisateurs Comment passer le nom de lot en utilisant "%~f0 "