在脚本中的某个时刻,我希望bat脚本自己删除。 这要求脚本知道它的名字,然后使用这个名字来删除它自己。 这可能吗?
现有的答案都没有为批处理文件提供一个干净的方式来删除自己,并退出没有任何可见的错误信息。
简单的包括del "%~f0"
确实会删除脚本,但是也会导致一个丑陋的“无法找到批处理文件”。 错误信息。
如果脚本可以关闭父CMD进程(控制台窗口),那么以下工作正常,没有任何错误消息:
del "%~f0"&exit
但是,如果您希望脚本自行删除并退出而不关闭父CMD过程,并且没有任何错误消息,则会更复杂一些。
方法1:启动在实际执行删除的同一控制台窗口中运行的第二个进程。 EXIT /B
可能不是必需的,但我把它放在最大化批处理脚本将在STARTed进程尝试删除文件之前关闭的可能性。
start /b "" cmd /c del "%~f0"&exit /b
方法2:创建控制权并将其转移到另一个临时批处理文件,该文件可以删除自己以及调用者,但不要使用CALL,并将stderr重定向到nul。
>"%~f0.bat" echo del "%~f0" "%~f0.bat" 2>nul "%~f0.bat"
如果我没有弄错,%0将是用于调用批处理文件的路径。
测试和工作:
del %0 exit
%0给出了来自bat文件启动目录的相对路径。 所以如果你叫它
mybats\delyourself.bat tango roger
%0将包含mybats\delyourself.bat
del %0
工程,如果你还没有改变你的当前目录。
%~f0
〜f0扩展到文件的完整路径。
对我来说,重要的是我退出批处理文件后没有 errorLevel 1。 我用这种方法找到了一个合适的和简单的答案: DeleteMyself.cmd:
START CMD /C DEL DeleteMyself.cmd
如果DeleteMyself.cmd返回errorLevel 0,则测试批处理。TestDeleteMyself.cmd :
call DeleteMyself.cmd echo Errorlevel: %errorLevel%