在我的脚本中,我希望bat脚本能够自行删除。这要求脚本知道其名称,然后使用该名称删除自己。这可能吗?
答案 0 :(得分:12)
现有的答案都没有为批处理文件提供一种干净的方式来删除自己并退出而没有任何可见的错误消息。
简单地包括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"
答案 1 :(得分:3)
如果我没弄错的话,%0将是用于调用批处理文件的路径。
答案 2 :(得分:2)
经过测试和工作:
del %0
exit
答案 3 :(得分:1)
%0为您提供了启动bat文件的目录的相对路径。所以,如果你称之为
mybats\delyourself.bat tango roger
%0将包含mybats\delyourself.bat
del %0
将起作用。
%~f0
扩展到文件的完整路径。
答案 4 :(得分:-1)
对我而言,退出批处理文件后,我有否 errorLevel 1非常重要。我用这种方式找到了一个合适而简单的答案: 的 DeleteMyself.cmd:强>
START CMD /C DEL DeleteMyself.cmd
如果DeleteMyself.cmd返回errorLevel 0,则测试批次。 TestDeleteMyself.cmd :
call DeleteMyself.cmd
echo Errorlevel: %errorLevel%