Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Самоудаление батника запускаемого без параметров. (http://forum.oszone.net/showthread.php?t=260995)

Lucretius 21-05-2013 22:34 2153763

Самоудаление батника запускаемого без параметров.
 
Нужно чтобы батник самоликвидировался, но только в случае запуска его без параметров.
Параметры необходимы для указания меток: GoTo %1 .

Foreigner 21-05-2013 22:53 2153772

Код:

if "%~1"=="" del "%~f0"

Lucretius 21-05-2013 23:10 2153777

Foreigner, спасибо. То, что нужно.
Скажите, насколько важно указывать полный путь в переменной: %~f0 ? Я считал что достаточно del %0 ...

Foreigner 21-05-2013 23:22 2153783

Lucretius, Если запускать из другой папки, то он не удалится. Поместите куда-нибудь в %path% и запустите по названию.

Iska 21-05-2013 23:26 2153785

Цитата:

Цитата Lucretius
Я считал что достаточно del %0 »

Это сработает только в том случае, если текущим каталогом будет каталог пакетного файла. Если не так (попробуйте сделать текущим каталогом какой-либо другой, а затем запустить оттуда пакетный файл; либо банально текущий каталог меняется в самом пакетном файле; либо не разрешено использование UNC путей, а пакетный файл запускается оттуда), то, в лучшем случае, Вы получите отлуп «Файл не найден», в худшем — удалите существующий там одноимённый пакетный файл.

Lucretius 21-05-2013 23:27 2153787

Цитата:

Цитата Foreigner
Если запускать из другой папки, то он не удалится. Поместите куда-нибудь в %path% и запустите по названию. »

Ясно, спасибо.

Foreigner 21-05-2013 23:30 2153791

Цитата:

Цитата Iska
в худшем — удалите существующий там одноимённый пакетный файл. »

Я даже не задумался, что такое возможно. Спасибо.

Iska 22-05-2013 00:15 2153800

Цитата:

Цитата Foreigner
Я даже не задумался, что такое возможно. »

Классический пример Вы должны помнить:
читать дальше »
Цитата:

Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. Однако возможны неожиданности. Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие.

В тот день я узнал, что такое System Restore…
Источник: Урок bat-аники

Я лично пользую пару pushd/popd (несмотря на то, что у меня UNC-пути разрешены), но вообще сам пример показателен.


Время: 12:36.

Время: 12:36.
© OSzone.net 2001-