Come fare. File BAT cancellarlo dopo il completamento?

Come fare. File BAT cancellarlo dopo il completamento? Ho un semplice file bat che termina un processo. Voglio quel file .BAT per cancellarsi.

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

Nota che la linea DEL è l’ultima cosa che vuoi eseguire all’interno del file batch, altrimenti sei sfortunato 🙂

Questo stamperà un brutto messaggio di errore, ma è benigno, e il codice è leggermente meno confuso in questo modo. Se ti preoccupi molto di liberarti del messaggio di errore, vedi la risposta di dbenham per sbarazzartene.

La risposta Merlyn Morgan-Graham consente di eliminare lo script batch in esecuzione, ma genera il seguente messaggio di errore: ” Imansible trovare il file batch. ” Questo non è un problema se la finestra della console si chiude quando termina lo script, poiché il messaggio lampeggia così velocemente che nessuno lo vedrà. Ma il messaggio di errore è molto indesiderato se la console rimane aperta dopo la fine dello script.

John Faminella ha la giusta idea che è necessario un altro processo per cancellare in modo pulito il file batch senza errori. La pianificazione di un’attività può funzionare, ma esiste un modo più semplice: utilizzare START per avviare una nuova procedura di eliminazione all’interno della stessa console. Ci vuole del tempo per l’avvio e l’esecuzione del processo, quindi lo script genitore ha la possibilità di terminare in modo pulito prima che avvenga l’eliminazione.

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

Aggiornamento 2015-07-16

Ho scoperto un altro modo davvero intelligente per fare in modo che uno script batch si cancelli senza generare alcun messaggio di errore. La tecnica dipende da un comportamento appena scoperto di GOTO (scoperto da alcuni russi), descritto in inglese a http://www.dostips.com/forum/viewtopic.php?f=3&t=6491

In sintesi, (GOTO) 2>NUL si comporta come EXIT /B , tranne che consente l’esecuzione di comandi concatenati nel contesto del chiamante!

Quindi tutto ciò che serve è

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

Non hai menzionato il sistema operativo, ma se questo è in Windows XP Professional e disponi delle autorizzazioni appropriate, puoi fare in modo che il file batch pianifichi un’operazione pianificata di Windows one-shot per eliminare il file in un secondo momento. Usa il comando schtasks , documentato qui .

In caso contrario, in genere non è ansible eliminare un file che viene eseguito, poiché questo ha il potenziale per tutti i tipi di cattiveria. Inoltre, tentare di eliminare un eseguibile in uso è considerato come un comportamento molto sospetto da parte di un numero qualsiasi di programmi antivirus, quindi è probabile che si eseguirà anche questo.

Basta aggiungere questo comando sull’ultima riga del tuo file batch

 Del batch_file_name.bat 

batch_file_name.bat è il nome del file batch

Saluti

potresti farlo @ Merwer’s aswer

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

Ora crea un vbscript con questa codifica e salvalo come hidden.vbs, questo vbscript nasconderà la finestra del file batch.

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

Quindi fare in modo che il file batch esegua questo vbscript

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

Ciò nasconderà il file batch prima di eliminarlo rendendo imansible visualizzare il messaggio di errore.

Potresti anche indirizzare l’output del DEL “% ~ f0” all’output NULL in questo modo …

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