如何制作.BAT文件完成后自行删除?

时间:2010-05-22 17:05:57

标签: batch-file process delete-file

如何制作.BAT文件完成后自行删除?我有一个简单的bat文件终止进程。我想要.BAT文件删除自己。

7 个答案:

答案 0 :(得分:40)

Merlyn Morgan-Graham的答案设法删除正在运行的批处理脚本,但它会生成以下错误消息:“ 无法找到批处理文件。 ”这是如果在脚本终止时控制台窗口关闭,则不会出现问题,因为消息将以如此之快的速度闪烁,以至于没有人会看到它。但是,如果在脚本终止后控制台仍处于打开状态,则非常不希望出现错误消息。

John Faminella有正确的想法,需要另一个进程来干净地删除批处理文件而不会出错。调度任务可以工作,但有一种更简单的方法:使用START在同一控制台中启动新的删除过程。进程启动和执行需要一些时间,因此父脚本有可能在删除发生之前彻底终止。

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

更新2015-07-16

我发现了另一种非常灵活的方法,可以让批处理脚本自行删除,而不会生成任何错误消息。该技术取决于新发现的GOTO行为(由一些俄罗斯人发现),用http://www.dostips.com/forum/viewtopic.php?f=3&t=6491英文描述

总之,(GOTO) 2>NUL的行为与EXIT /B相似,只不过它允许在调用者的上下文中执行连接命令!

所以你需要的只是

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

答案 1 :(得分:33)

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

请注意,DEL行最好是你打算在批处理文件中执行的最后一件事,否则你运气不好:)

这将打印出一个丑陋的错误消息,但它是良性的,并且代码稍微不那么令人困惑。如果你非常关心摆脱错误信息,请参阅dbenham's answer以摆脱它。

答案 2 :(得分:4)

您没有提及操作系统,但如果这是在Windows XP Professional上并且您具有相应的权限,则可以让批处理文件安排一次性Windows计划任务以便稍后删除该文件。使用schtasks命令,记录 here

否则,您通常无法删除正在执行的文件,因为它可能存在各种各样的肮脏。此外,尝试删除正在使用的可执行文件被任何数量的防病毒程序视为非常可疑的行为,因此您可能会与这些程序发生冲突。

答案 3 :(得分:1)

只需在批处理文件的最后一行添加此命令

Del batch_file_name.bat

batch_file_name.bat是批处理文件的名称

干杯

答案 4 :(得分:0)

你可以做@ Merlyn的aswer

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

现在使用此编码制作一个vbscript并将其保存为hidden.vbs,此vbscript将隐藏批处理文件的窗口。

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

然后让批处理文件运行此vbscript

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

这将在删除之前隐藏批处理文件,使得无法看到错误消息。

答案 5 :(得分:0)

您还可以将 DEL“%~f0”的输出指向NULL输出,如此...

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

答案 6 :(得分:0)

内联下一个命令,以幽灵自我的身份做“最后一件事”。退出前可以是exit命令或者其他一些东西。

@echo off
del "%~f0" && echo All's done. I must exit! && pause > nul && exit