How to make a batch file delete itself?

前端 未结 9 871
遇见更好的自我
遇见更好的自我 2020-11-28 06:07

Is it possible to make a batch file delete itself?

I have tried to make it execute another file to delete it but this did not work.

Does any one know how I cou

相关标签:
9条回答
  • 2020-11-28 06:15

    del %0 as the last line of the batch file

    0 讨论(0)
  • 2020-11-28 06:16

    npocmaka's answer works, but it generates the following error message: "The batch file cannot be found." This isn't a problem if the console window closes when the script terminates, as the message will flash by so fast, no one will see it. But it is very undesirable if the console remains open after the script terminates.

    The trick to deleting the file without an error message is to get another hidden process to delete the file after the script terminates. This can easily be done using START /B to launch a delete process. It takes time for the delete process to initiate and execute, so the parent script has a chance to terminate cleanly before the delete happens.

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

    You can simply use a CALLed subroutine if you are worried about SHIFT trashing the %0 value.

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

    Update 2015-07-16

    I've discovered another really slick way to have a batch script delete itself without generating any error message. The technique depends on a newly discovered behavior of GOTO (discovered by some Russians), described in English at http://www.dostips.com/forum/viewtopic.php?f=3&t=6491

    In summary, (GOTO) 2>NUL behaves like EXIT /B, except it allows execution of concatenated commands in the context of the caller!

    So all you need is

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

    The returned ERRORLEVEL will be 0 because DEL is the last command and it always clears the ERRORLEVEL.

    If you need to have control of the ERRORLEVEL, then something like

    (goto) 2>nul & del "%~f0" & cmd /c exit /b 10
    
    0 讨论(0)
  • 2020-11-28 06:16
    del "%~f0"
    

    will work, but there's an error message if you call it from a previously open console (can be ignored however).

    0 讨论(0)
  • 2020-11-28 06:18
    ( del /q /f "%~f0" >nul 2>&1 & exit /b 0  )
    

    Set this at the end of the script. (might not work if SHIFT command is used)

    0 讨论(0)
  • 2020-11-28 06:18

    You can use del (name) if it on the desktop otherwise use del (path to file ex. del C:\WINDOWS.

    P.S Does not make error msg

    0 讨论(0)
  • 2020-11-28 06:19

    As an answer to this question, (which is put on hold) this batch will selfdestruct after three runs. The code to achieve this is condensed in the last 3 lines. It incorporates the above tip from 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
    

    The batch modifies itself by appending a token after each run and counting the occurences of the token. If the number is reached it deletes itself.

    > Dir /B Kill*
    KillMySelf.cmd
    
    > KillMySelf.cmd
    Run-1
    
    > KillMySelf.cmd
    Run-2
    
    > KillMySelf.cmd
    Run-3
    
    > Dir /B Kill*
    File Not Found
    
    0 讨论(0)
提交回复
热议问题