Показать полную графическую версию : [решено] Самоудаление батника запускаемого без параметров.
Lucretius
21-05-2013, 22:34
Нужно чтобы батник самоликвидировался, но только в случае запуска его без параметров.
Параметры необходимы для указания меток: GoTo %1 .
Foreigner
21-05-2013, 22:53
if "%~1"=="" del "%~f0"
Lucretius
21-05-2013, 23:10
Foreigner, спасибо. То, что нужно.
Скажите, насколько важно указывать полный путь в переменной: %~f0 ? Я считал что достаточно del %0 ...
Foreigner
21-05-2013, 23:22
Lucretius, Если запускать из другой папки, то он не удалится. Поместите куда-нибудь в %path% и запустите по названию.
Я считал что достаточно del %0 »
Это сработает только в том случае, если текущим каталогом будет каталог пакетного файла. Если не так (попробуйте сделать текущим каталогом какой-либо другой, а затем запустить оттуда пакетный файл; либо банально текущий каталог меняется в самом пакетном файле; либо не разрешено использование UNC путей, а пакетный файл запускается оттуда), то, в лучшем случае, Вы получите отлуп «Файл не найден», в худшем — удалите существующий там одноимённый пакетный файл.
Lucretius
21-05-2013, 23:27
Если запускать из другой папки, то он не удалится. Поместите куда-нибудь в %path% и запустите по названию. »
Ясно, спасибо.
Foreigner
21-05-2013, 23:30
в худшем — удалите существующий там одноимённый пакетный файл. »
Я даже не задумался, что такое возможно. Спасибо.
Я даже не задумался, что такое возможно. »
Классический пример Вы должны помнить:
Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. Однако возможны неожиданности. Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие.
В тот день я узнал, что такое System Restore…
Источник: Урок bat-аники (http://www.rsdn.ru/article/winshell/batanyca.xml)
Я лично пользую пару pushd/popd (несмотря на то, что у меня UNC-пути разрешены), но вообще сам пример показателен.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.