Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
MadSam Гость
|
Добавлено: Вс Окт 12 2003 21:02 Заголовок сообщения: Помогите разобраться с bat-файлом, пжлста |
|
|
Кто-нибудь поясните пожалёста поподробней каждую строчку и что в ней всякие символы значат. Буду вам очень благодарен. Заранее Спасибо. Вот код:
@echo off
set f="%~dp0"
set tb="%temp%\%random%.bat"
pushd %temp%
echo ^@echo off > %tb% rem echo sleep 1 >> %tb% echo rmdir /q /s %f% ^>nul 2^>^&1 >> %tb% echo if exist %f% ^( >> %tb% echo echo Can't delete %f% >> %tb% echo echo Check if any file within %f% >> %tb% echo echo is used by another process >> %tb% echo pause >> %tb% echo ^) >> %tb% echo del /q /f %tb% >> %tb%
echo %f% will be deleted now. pause start cmd /c %tb% |
|
Вернуться к началу |
|
|
4u3u
Зарегистрирован: 24.01.2003 Сообщения: 997 Откуда: Moscow
|
Добавлено: Пн Окт 13 2003 02:20 Заголовок сообщения: :)) так это ж мой батник :)) Вот интересно посмотреть, как его разберут... (-) |
|
|
- |
|
Вернуться к началу |
|
|
FFF Гость
|
Добавлено: Пн Окт 13 2003 15:59 Заголовок сообщения: Re: Помогите разобраться с bat-файлом, пжлста |
|
|
>>set f="%~dp0" переменной f присваивается имя текущего каталога
>>set tb="%temp%%random%.bat" переменной td присваивается значение, получаемое сцеплением значений переменных temp, random и строки ".bat". Переменная окружения temp, каку правило, указывает на каталог хранения временных файлов. Переменная random, скорее всего, это своя переменная окружения. Но она может и отсутствовать. В tb заносится, как будкт ясно из дальнейшего, имя временного командного файла. Это имя имеет вид D:\TEMP\27236hshs.bat
>>pushd %temp% запомнить текущий каталог и перейти в каталог, на который указывает переменная окружения temp. Вернуться в предыдущий каталог можно командой popd
>>echo ^@echo off > %tb% в файл, имя которого содержится в tb, записать строку @echo off (символы ^ [крышка] применяются для "экранирования" спец.символов, т.е. символ > НЕ будет интепретироваться командным процессором command.com, а будет рассматриваться как обычный символ, который по команде echo выводится на экран. Но в данном случае вывод команды echo перенаправляется в файл, имя которого содержится в tb.
>>rem echo sleep 1 >> %tb% закомментированная строка. ничего не делает
>>echo rmdir /q /s %f% >nul 2>&1 >> %tb% в файл, имя которого содержится в tb, добавить строку rmdir /q /s имя_пред_каталога >nul 2>&1 удалить каталог, в котором находились до перехода в TEMP-каталог. Причем, каталог удаляется вместе со всеми его подкаталога и без всяких запросов к пользователю. >nul -- направить весь стандартный вывод в пустоту (не на экран), &2>1 -- направить все сообщения об ошибках в стандартный вывод (т.е. в пустоту) >> %tb% -- ДОБАВИТЬ строку в файл, имя которого содержится в tb. Если оставить только один символ > , то в файле %tb% останется только эта последняя строка; все предыдущее содержимое будет удалено.
>>echo if exist %f% ^( >> %tb% >>echo echo Can't delete %f% >> %tb% >>echo echo Check if any file within %f% >> %tb% >>echo echo is used by another process >> %tb% >>echo pause >> %tb% >>echo ^) >> %tb% >>echo del /q /f %tb% >> %tb% >> >>echo %f% will be deleted now. >>pause >>start cmd /c %tb%
дальнейшие строки и сами разберете. Смысл в том, что 1) формируется временный .bat-файл, имя которого хранится в переменной %tb%, 2) этот .bat-файл запускается на выполнение. а результатом работы этого .bat-файла является удаление содержимого каталога (вместе со всеми его подкаталогами), в котором мы находись при запуске исходного .bat-файла . |
|
Вернуться к началу |
|
|
4u3u
Зарегистрирован: 24.01.2003 Сообщения: 997 Откуда: Moscow
|
Добавлено: Пн Окт 13 2003 16:21 Заголовок сообщения: Вай, какой джигит! Пачти все рассказал :) (-) |
|
|
- |
|
Вернуться к началу |
|
|
4u3u
Зарегистрирован: 24.01.2003 Сообщения: 997 Откуда: Moscow
|
Добавлено: Пн Окт 13 2003 17:23 Заголовок сообщения: доп: (+) |
|
|
set f="%~dp0" >переменной f присваивается >имя текущего каталога Не совсем точно. Текущий каталог можно получит из переменной %CD%, в данном же случае мы получаем полный путь к каталогу, в котором расположен батник. Он ведь не обязательно запускается из своего каталога.
%1-%9 возвращают значение аргументов батника. То есть, если ты выполняешь команду "mybat.bat parameter", то %1 возвратит "parameter" %0 возвращает имя самого батника. Но это не все. Эти параметры можно модифицировать используя синтаксис %~xY. %~d0 возвратит букву диска, на котором расположен батник %~p0 возвратит путь (без диска) к батнику Соответственно, %~dp0 возвратит полный путь к батнику, что нам в данном случае и нужно.
RANDOM - динамическая переменная окружения в 2k/xp, возвращающая значение от до 32767 Чтобы использовать переменные окружения (глобальные, или назначенные в батнике), имена переменных заключают в %% то есть set var = hello! echo %var% выдаст на экран строку "hello!"
Посмотреть текущие переменные окружения можно командой "set" без параметров.
По поводу перенаправления тоже чуть добавлю: > и >> - символы перенаправления вывода. Можно перенаправлять в файл, из файла, на принтер, в ком-порт и т.п. > перезаписывает данные >> добавляет данные (об этом FFF уже написал) NUL - это, по определению MS, специальный виртуальный файл (в отличие от *nix, где это устройство, а не файл), который существует в любой директории. Туда можно, например, перенаправлять вывод, если он не нужен.
Чтобы узнать о всех командах, которые используются в этом батнике (а так же много чего еще), надо лишь нажать Start > Help и добраться до пункта MS-DOS commands. |
|
Вернуться к началу |
|
|
4u3u
Зарегистрирован: 24.01.2003 Сообщения: 997 Откуда: Moscow
|
Добавлено: Пн Окт 13 2003 17:26 Заголовок сообщения: забыл: (+) |
|
|
>результатом работы этого .bat-файла является >удаление содержимого каталога >(вместе со всеми его подкаталогами), >в котором мы находись при запуске >исходного .bat-файла .
Нет, не текущего, а каталога, в котором находился батник в момент его запуска. |
|
Вернуться к началу |
|
|
|