Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Помогите разобраться с bat-файлом, пжлста

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Windows
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Заголовок сообщения: :)) так это ж мой батник :)) Вот интересно посмотреть, как его разберут... (-) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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    Заголовок сообщения: Вай, какой джигит! Пачти все рассказал :) (-) Ответить с цитатой

-
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
4u3u



Зарегистрирован: 24.01.2003
Сообщения: 997
Откуда: Moscow

СообщениеДобавлено: Пн Окт 13 2003 17:26    Заголовок сообщения: забыл: (+) Ответить с цитатой

>результатом работы этого .bat-файла является
>удаление содержимого каталога
>(вместе со всеми его подкаталогами),
>в котором мы находись при запуске
>исходного .bat-файла .

Нет, не текущего, а каталога, в котором находился батник в момент его запуска.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Windows Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...