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

Как удалить пакетный файл?

Возможно ли, чтобы пакетный файл удалял его сам?

Я попытался заставить его выполнить другой файл, чтобы удалить его, но это не сработало, никто не знает, как я могу это сделать. Пакетный файл, который я использую, повышен. Моя ОС - это Windows 7 32 бит.

4b9b3361

Ответ 1

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

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

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

Вы можете просто использовать подпрограмму CALLed, если вы беспокоитесь о том, что SHIFT уничтожает значение %0.

call :deleteSelf&exit /b
:deleteSelf
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"

Ответ 2

( del /q /f "%~f0" >nul 2>&1 & exit /b 0  )

Установите это в конце script. (может не работать, если используется команда SHIFT)

Ответ 3

del "%~f0"

будет работать, но есть сообщение об ошибке, если вы вызываете его из ранее открытой консоли (может быть проигнорировано).

Ответ 4

del %0

Как последняя строка файла является самым простым способом, который я нашел. %0 возвращает имя текущего исполняемого файла .cmd.

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

Ответ 5

В качестве ответа на этот вопрос, который приостановлен, эта партия будет самоуничтожаться после трех запусков. Код для достижения этого конденсируется в последних 3 строках. Он включает выше совет от 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

Партия модифицирует себя, добавляя токен после каждого прогона и подсчитывая вхождения токена. Если число достигнуто, оно удаляет себя.

> Dir /B Kill*
KillMySelf.cmd

> KillMySelf.cmd
Run-1

> KillMySelf.cmd
Run-2

> KillMySelf.cmd
Run-3

> Dir /B Kill*
File Not Found

Ответ 6

Вы можете использовать del (name), если на настольном компьютере использовать del (path to file ex. del C:\WINDOWS.

P.S Не делает ошибку msg

Ответ 7

del% 0 как последняя строка командного файла

Ответ 8

вы можете установить задержку, чтобы избежать условий гонки, вот 15 секунд:

START /B CMD.EXE /D /C "PING.EXE -n 15 127.0.0.1 && DEL prova.bat"

ПРИМЕЧАНИЯ

  • CMD.EXE/D является обязательным, чтобы избежать выполнения автоматического запуска crap-ware.
  • PING и DEL должны быть выполнены синхронно, поэтому окружены кавычками
  • Я предоставляю пользователям, как передать имя пакета, используя "% ~ f0"