Подтвердить что ты не робот

Как сделать .BAT файл удалить его после завершения?

Как сделать .BAT файл удалить его после завершения? У меня есть простой файл bat, который завершает процесс. Я хочу, чтобы этот .BAT файл удалял сам.

4b9b3361

Ответ 1

@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, чтобы избавиться от него.

Ответ 2

Ответ Merlyn Morgan-Graham удаляет запущенную партию script, но генерирует следующее сообщение об ошибке: " Пакетный файл не может быть найден." Это не проблема, если консольное окно закрывается, когда script завершается, так как сообщение будет мигать так быстро, что его никто не увидит. Но сообщение об ошибке очень нежелательно, если консоль остается открытой после завершения script.

Джон Фаминелла имеет правильную идею о том, что требуется еще один процесс для чистого удаления командного файла без ошибок. Планирование задачи может работать, но есть более простой способ: использовать START для запуска нового процесса удаления в той же консоли. Для запуска и выполнения процесса требуется время, поэтому родительский script имеет возможность прекратить работу до того, как произойдет удаление.

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

Обновление 2015-07-16

Я обнаружил еще один действительно удачный способ, чтобы пакет script удалялся сам, не генерируя никакого сообщения об ошибке. Метод зависит от недавно обнаруженного поведения GOTO (обнаруженного некоторыми россиянами), описанного на английском языке http://www.dostips.com/forum/viewtopic.php?f=3&t=6491

Таким образом, (GOTO) 2>NUL ведет себя как EXIT /B, за исключением того, что он позволяет выполнять конкатенированные команды в контексте вызывающего!

Итак, все, что вам нужно, это

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

Ответ 3

Вы не упомянули ОС, но если это в Windows XP Professional и у вас есть соответствующие разрешения, вы можете иметь расписание пакетного файла однозадачную запланированную задачу Windows, чтобы удалить файл позже. Используйте команду schtasks, зарегистрированную здесь.

В противном случае вы, как правило, не можете удалить файл, который выполняется, поскольку это может иметь всевозможные гадости. Кроме того, попытка удалить исполняемый файл, который используется, рассматривается как очень подозрительное поведение любого количества антивирусных программ, поэтому, вероятно, вы также столкнетесь с этим.

Ответ 4

Просто добавьте эту команду в последнюю строку вашего командного файла

Del batch_file_name.bat

batch_file_name.bat - это имя вашего командного файла

Приветствия

Ответ 5

вы можете сделать @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"

Это скроет командный файл перед удалением, что делает невозможным просмотр сообщения об ошибке.

Ответ 6

Вы также можете направить вывод DEL "% ~ f0" на вывод NULL, например...

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