Вы находитесь на странице: 1из 27

BAT-файлы

в MS DOS
УЧЕБНОЕ ПОСОБИЕ
по курсу «Информатика»
для 8 класса

Составитель и редактор А.А.Греков


При подготовке учтены материалы сайтов
www.firststeps.ru, www.igromania.ru, assorty.narod.ru

Школа «Афины»
Киев, 2013
Вместо предисловия

Второе дыхание DOS'а


(Отрывок из статьи Константина Артемьева,
опубликованной в журнале «Игромания», № 60, 2002)

Продолжаем цикл статей, посвященных программированию. На этот


раз мы поговорим о... DOS! Удивлены? Нет, я не ошибся. Дело в том, что
DOS — тоже своего рода язык программирования, а не просто операци-
онная система. И его возможности выходят далеко за стандартный пооче-
редный запуск программ. DOS, конечно, не подойдет для создания ком-
пьютерных игр. Тогда зачем мы его рассматриваем? Потому что DOS в
качестве языка программирования очень необычен и чрезвычайно функ-
ционален. Ведь это и операционная система, и мощный скриптовый язык.
С его помощью можно легко и быстро оптимизировать многие рутинные
операции с файлами. Кроме того, с помощью DOS можно создавать за-
грузочные меню и даже красивые диалоговые мультиокна.
Многие думают, что в век гигагерцев и всеобщего XP такая отсталая
и нетехнологичная вещь, как DOS, вообще не нужна. Эти люди заблуж-
даются! Попробую их переубедить. Во-первых, многие не знают о про-
двинутых возможностях старой доброй дисковой операционки. Во-
вторых, DOS будет почище любого «левого» скриптового языка. Бук-
вально за несколько минут на нем можно написать процедуры для пото-
ковой обработки файлов (например, для очистки определенного мусора с
дисков или для «умного» перемещения файлов). В-третьих, в случае
серьезного системного сбоя (которые случаются сплошь и рядом), кто
нам починит протекшие мозги? Уж не безопасный ли режим досточтимо-
го Windows? Нет, он тут не функционален. Придется доставать дискетку с
DOS — уж он-то не откажет.
DOS — очень полезная в быту вещь и, вопреки мнению многих,
очень удачно сочетается с Windows. Прочитав эту статью, вы убедитесь в
его всемогуществе окончательно.

2
Есть такая ось...
Для совсем уж новичков в компьютерном мире кратко расскажу, что
такое MS DOS. Когда-то это была одна из самых популярных операцион-
ных систем. MS DOS — легендарное детище всем известной Microsoft,
продержавшееся удивительно долго. Были в то время и другие операци-
онки для PC (например, PC DOS, DR DOS, PTS DOS и т.д.), но MS DOS
победил их всех, взяв, как обычно, не качеством, а количеством.
Визуально DOS — унылый черный экран с одинокой строчкой внизу.
Для запуска программ, работы с папками (в то время они назывались ка-
талогами) и файлами, а также для других служебных операций, характер-
ных для всех операционных систем, приходилось набирать соответст-
вующие команды. Norton Commander тогда еще не придумали, и команд-
ный язык DOS был единственной возможностью хоть как-то работать с
компьютером. Но даже когда появился Norton, пользователи не отказыва-
лись от DOS (на самом деле «Нортон» — это всего лишь оболочка, кото-
рая без DOS работать не в состоянии), потому что некоторые специфиче-
ские функции без него не выполнишь.
Шло время, идея оконного интерфейса по цепочке от фирмы к фирме
докатилась-таки до Microsoft, и появился Он — великий Windows 3.1!
Для пользователей PC это был настоящий праздник (наивные, они очень
скоро постигли и обратную, мученическую сторону жизни пользователя
«окошек»). Но суть оставалась той же — Windows 3.1 все еще не был
полноценной операционной системой, а только надстройкой над DOS.
По-настоящему самостоятельным он стал только к версии 95. Но DOS
остался — вместе с хитрым рекламным ходом о полной обратной совмес-
тимости. Да, под всеми окошками можно запускать программы для DOS,
но какой ценой!
Однако сейчас вы убедитесь, что при правильном использовании ка-
залось бы ненужный теперь DOS обретёт второе дыхание.
Где его найти? Пуск/Программы/Сеанс MS DOS. Перед вами
появится черное окошко с белой текстовой строкой. Это так называемая
эмуляция DOS. Обычно ее достаточно для повседневных нужд, но в слу-
чае тяжелого сбоя или специфической задачи пользуются настоящим
DOS. Для этого надо перезагрузиться и держать нажатой клавишу F8.
Появится меню. Надо выбрать строку, в которой фигурирует слово DOS
(таких строк обычно несколько).
[конец отрывка из статьи К.Артемьева]

3
BAT-файлы

1. Что такое BAT-файлы


Основной объект программирования в DOS — это пакетные файлы,
или BAT-файлы (произносится: батч-файлы). Расширение .BAT полу-
чилось от английского слова batch (пакет). Это обычные текстовые фай-
лы с набором команд, или, если говорить современным языком, это
скрипты, которые автоматизируют некоторые рутинные операции. Лю-
бым таким скриптом можно запустить программу и из-под DOS, и из-под
Windows. Вы можете создать этих файлов сколько угодно и использовать
их по своему усмотрению. Но обычно с их помощью делаются какие-то
сложные операции (например, с файловой системой), — операции, кото-
рые вручную делать долго и нудно.

2. Для чего нужны BAT-файлы


1. Автоматическое исполнение. Каждый раз, когда вы включае-
те компьютер, вам требуются какие-то начальные установки: загрузка
драйверов мыши, CD-ROM, принтера; программ, управляющих памятью,
и т.д. Каждый раз, при загрузке системы, DOS запускает файл
AUTOEXEC.BAT, находящийся в корневом каталоге загрузочного диска.
Теперь, зная, что это за файл, вы можете сами управлять процессом за-
грузки.
2. Экономия времени. Вы не замечали, что постоянно набираете
одну и ту же серию команд или одну длинную команду по несколько раз
в день? Или, например, у вас очень развитое дерево каталогов, и ваша
любимая игра находится в каталоге F:\Ent\FAVORITE\GAMES\ 3D-
ACT\DOOM\. Что бы добраться до нее, нужно менять текущий диск, за-
ходить в один каталог, потом в другой и т.д. А если учесть, что вы играете
одну и туже игру довольно часто, то вам приходится проходить эту про-
цедуру не один раз. Почему бы не создать в каталоге, доступном по ко-
манде PATH, файл DOOMRUN.BAT, содержащий:
CD F:\Ent\FAVORITE\GAMES\3D-ACT\DOOM
doom.exe
Теперь, на каком бы диске или в каком каталоге бы вы не находи-
лись, набрав в командной строке
doomrun
вы сможете сразу запустить игру.
4
3. Установка параметров по умолчанию. Допустим, вы рабо-
таете с программой, которая просит выбрать ширину экрана, шрифта, тип
принтера и т.д. Чтобы не вводить каждый раз многочисленные парамет-
ры, можно выбрать те из них, которые используются постоянно. Пример
файла EDIT.BAT:
REM -- Starts WordPerfect
wp /D-e:\ /R /NS /B-15 /M-startup %1
Единственный параметр, который вам нужно будет вводить — это
имя файла, который вы хотите редактировать:
EDIT work.doc
4. Помощь новичкам. Если вы являетесь экспертом по компьюте-
рам, компьютерным гуру, вы можете облегчить жизнь неопытным поль-
зователям. Например, вашему дедушке не нужно будет производить
сложные манипуляции мышкой, чтобы принять почту, если вы, скажем,
создадите для него файл EMAIL.BAT.
5. Защита данных. Нет ничего страшнее, чем команда FORMAT в
руках чайников. Пытаясь отформатировать дискету, они могут испортить
жесткий диск. Но вы можете избежать этого, просто переименовав
FORMAT.COM в XFORMAT.COM, и создав файл FORMAT.BAT, содер-
жащий строку:
xformat.com A:
Таким образом, при помощи команды FORMAT можно будет отфор-
матировать только дискету.

3. Структура BAT-файла
По структуре BAT-файл очень похож на программу, написанную на
языке BASIC. Каждая команда пишется в новой строке. Команда обычно
состоит из собственно командного слова, параметров и различных при-
ставок через пробелы.

Внимание! Все команды, которые пишутся в


BAT-файле, — стандартные команды DOS. Ни-
чего нового или специального там нет.

Одним из хорошо знакомых вам BAT-файлов является файл автоза-


грузки AUTOEXEC.BAT:

5
4. Создание BAT-файла
Существуют по крайней мере два способа создания BAT-файлов.
Для создания коротких файлов можно просто ввести его с клавиату-
ры, не загружая дополнительных программ. Например, для создания
трехстрочного файла с именем DIRCD.BAT, который показывает содер-
жание дисков C и D, используется следующий набор команд:
COPY CON dircd.bat <Enter>
CLS <Enter>
DIR C: <Enter>
DIR D: <Enter>
^Z <Enter>
Символы ^Z означают конец файла. Вы можете вывести их на экран,
просто нажав на клавишу F6, или, удерживая клавишу CTRL, нажать Z.
<Enter> означает, что в конце строки нужно нажимать на клавишу
ENTER.

Внимание! BAT-файл должен иметь


расширение «.BAT».

Но лучше всего использовать любой текстовый редактор, который


может сохранять файлы в виде «стандартного текста» или «non-
document» файла.
Давайте создадим простейший BAT-файл. Допустим, у вас есть ка-
кой-то вордовский текст, с которым вы часто работаете. Чтобы каждый
раз не открывать Word и не загружать в него требуемый файл (который
еще и найти надо), можно создать простенький BAT-файл, который будет
выполнять все это за вас.
Откройте программу Блокнот и напишите такую строчку:
“с:\Program files\Microsoft Office\Office
\winword.exe” c:\mytext.doc
Естественно, на месте первого пути должен стоять путь к исполняе-
мому файлу Word, а на месте второго пути — путь к вашему документу.
Теперь сохраните полученный файл на рабочем столе с каким-нибудь по-
нятным именем. А теперь просто измените расширение файла с .TXT на
.BAT. Запустите файл. Загрузится Word, а в нем автоматически откроется
ваш документ. Теперь этим BAT-файлом можно пользоваться всегда.
Просто, быстро и удобно.
6
5. Просмотр BAT-файла
После создания файла, вам нужно будет просмотреть его содержи-
мое, что бы удостовериться, что в нём не содержится никаких ошибок.
Для этого можно воспользоваться командой TYPE:
TYPE autoexec.bat <Enter>
Контекстное меню Windows предусматривает специальный пункт
меню для просмотра и редактирования этих файлов.

При выборе этого пункта откроется программа Блокнот и Вы сможе-


те изменить файл.

6. Запуск BAT-файла
Что бы исполнить команды, содержащиеся в файле, просто наберите
его имя в командной строке без расширения. В нашем примере нужно
просто набрать:
autoexec <Enter>

7
В среде Windows вы можете запустить BAT-файл так же, как и обычную
программу: двойным щелчком по имени файла или по его иконке.

7. Команды BAT-файлов
Специальных команд, которые используются в BAT-файлах, немно-
го. Именно специальных, которые могут пригодиться при создании логи-
ки командного файла. Конечно, эти команды относятся к внутренним ко-
мандам MS DOS и могут использоваться в командной строке, но все-таки
эти команды обретают смысл только в пакетных файлах.
echo вывод сообщений и переключение режима отображе-
ния команд на экране
pause приостановка выполнения BAT-файла
if оператор условного выполнения команд в BAT-файле
goto передача управления в отмеченную строку BAT-файла
shift изменение содержимого (сдвиг) подставляемых пара-
метров для BAT-файла
call вызов одного BAT-файла из другого
for запуск указанной команды для каждого из файлов в
наборе
rem помещение комментариев в BAT-файлы
Кстати, вы сможете получить подсказку по каждой из этих команд
прямо в сеансе MS DOS, если запустите их с ключом /?

8
8. Вывод сообщений в BAT-файлах
Для вывода сообщения в BAT-файлах используется команда ECHO:
ECHO сообщение
Она применяется также и для переключения режима отображения
команд на экране:
ECHO ON или ECHO OFF
Ввод ECHO без параметров позволяет выяснить текущий режим ото-
бражения команд.
Давайте попробуем создать простой BAT-файл:
echo
echo hello batch files
Запускаем:

Как видите, режим ECHO включен по умолчанию. В итоге отобража-


ется и команда и результат. Давайте выключим этот режим:
echo off
echo hello batch files
Запускаем:

Но первая команда все равно видна. Это можно исправить, если пер-
вым символом в строке поставить значок @:
@echo off
echo hello batch files
9
Запускаем:

Вот теперь — то, что надо; почти настоящая программа!

9. Первая полезная программа


В BAT-файлах можно использовать любые команды MS DOS. Пред-
положим, нам нужна программа резервного копирования, которая будет
создавать новую папку с именем BACKUP и копировать туда содержи-
мое текущей папки. Пишем:
@echo off
echo start backup
mkdir backup
copy *.* backup
echo end backup
Запускаем:

И смотрим в проводнике:

Вот так, всё получилось! И не надо вручную создавать папки и тас-


кать в них мышкой файлы. Совершенно не обладая навыками програм-
мирования, мы можем заметно облегчить себе жизнь.
10
10. Использование PAUSE
PAUSE позволяет остановить выполнение BAT-файла до нажатия
клавиши на клавиатуре. Это может быть полезно, например, если вы хо-
тите, чтобы пользователь подтвердил выполнение какого-то действия на-
жатием на клавишу; в противном случае у него есть возможность нажать
комбинацию клавиш Ctrl+C и вовсе прервать выполнение BAT-файла.
Приостановка выполнения BAT-файла сопровождается сообщением
Нажмите любую клавишу . . .
или — в англоязычной версии —
Press any key to continue . . .
Рассмотрим BAT-файл, который копирует файл на дискету:
@echo off
echo Поместите дискету в дисковод A:
pause
copy 1.txt a:
В момент выполнения программа остановится:

А после нажатия произойдёт копирование. Но на экране останется окно:

Если Вы не хотите, чтобы окно оставалось, поместите в конец BAT-


файла команду CLS (команду очистки экрана):
.....
copy 1.txt a:
cls
И после завершения процесса копирования окно пропадет.

11
11. Параметры BAT-файла
Предположим, нам необходимо написать BAT-файл, который удалял
бы в текущей папке все файлы с заданным расширением. Причем расши-
рения могут быть самыми разными. Ну не создавать же нам десяток ко-
мандных файлов для удаления каждого типа файлов! А это и не нужно.
Можно использовать параметры.

Параметры — это любые слова, числа или ком-


бинации символов, которые в командной строке
следуют за именем BAT-файла. Параметры раз-
деляются пробелами. Если пробел или другой
специальный символ должен входить в состав
некоторого параметра, такой параметр берётся в
кавычки. Например,
save.bat “my document.doc”

Итак, при запуске BAT-файла, вы можете набрать разные параметры


после имени файла. Эти слова DOS будет использовать в качестве пере-
менных в командах BAT-файла.
Например, вздумав одним махом удалить все текстовые файлы, мож-
но просто написать
kill.bat txt
Слово txt является в данном случае параметром, который переда-
ется в наш BAT-файл.

12. Внутренние переменные BAT-файла


Всё это, конечно, хорошо, только вот как этот параметр принять и
обработать внутри BAT-файла? Очень просто. Надо использовать символ
подстановки %1. После запуска BAT-файла этот %1 автоматически будет
заменен на наш параметр везде, где он встретится в тексте BAT-файла.
Такой символ подстановки называется внутренней
переменной BAT-файла.
Если нужно использовать не один, а более входных параметров, пер-
вый параметр обозначается переменной %1, второй — переменной %2,
третий — %3, и т.д. Всего BAT-файл может обработать до 9-ти внешних
параметров.
Также можно использовать специальную переменную %0. Вместо неё
будет подставлено имя самого BAT-файла.
12
Посмотрим, каким же окажется на деле наш файл KILL.BAT. Он бу-
дет состоять всего лишь из одной короткой строчки:
del *.%1
Команда DEL, я думаю, всем знакома. В качестве параметра у нее
*.%1, т.е. маска всех файлов с любыми именами и расширениями, соот-
ветствующими текущему значению %1. Если мы напишем в командной
строке
kill.bat txt
вместо %1 подставится txt, и строка del *.%1 превратится в
del *.txt
Результатом выполнения этой команды будет удаление всех файлов с
расширением .TXT.
Возможность подстановки не ограничивается только параметрами
команд. Можно подставлять целые команды и даже куски программы.
Если в BAT-файле будет одна-единственная строчка %1, то любой
параметр BAT-файла будет автоматически обработан как команда. Если
после имени BAT-файла мы напишем имя программы, она запустится. И
так далее. Область применения этой возможности обширна. Именно та-
кие вещи и делают скриптовый язык BAT-файлов гибким.
Давайте создадим файл 6.BAT, который будет сохранять резервные
копии наших файлов в каталог с именем, соответствующим текущей дате.
Вызовем наш BAT-файл, например, такой командной строкой:

Число «18022002» является параметром. Внутри этого BAT-файла


мы можем его обработать:
@echo off
echo start backup
mkdir %1
copy *.* %1
echo end backup
13
Запускаем:

И вот результат:

13. Использование IF
Оператор IF можно использовать для проверки какого-то условия.
Если условие выполнено, то будет выполнена и команда, завершающая
строку, начатую оператором IF; если же нет — команда будет пропущена.
Оператор IF употребляется следующим образом:
IF [NOT] строка1 = = строка2 команда
IF [NOT] EXIST имя_файла команда
IF [NOT] ERRORLEVEL число команда

строка1 = = строка2 условие истинно при совпадении обеих


строк
команда команда, которую следует выполнить в
случае истинности условия
EXIST имя_файла условие истинно, если указанный файл
существует
NOT команда будет выполнена лишь в том
случае, если условие ложно
ERRORLEVEL число условие истинно, если последняя запу-
щенная программа завершилась с кодом
возврата, равным либо превышающим
указанное число
Давайте создадим файл GENERAL.BAT:
14
@echo off
if "%1"= ="H" echo Hello!
if "%1"= ="G" echo GoodBye!
и запустим его строкой general H :

Мы видим, что выполнилась только строка с параметром H.

14. Оператор GOTO


Но как нам поступить, если нужно выполнить больше чем одну ко-
манду? Тут нам поможет оператор GOTO, который переводит выполне-
ние программы на некоторую отмеченную строку BAT-файла:
GOTO метка
МЕТКА (LABEL) — это один или несколько символов, которые за-
писаны в отдельной строке программы и начинаются с двоеточия. Метка
сама по себе не является командой. Двоеточие также не является состав-
ной частью метки.
Давайте изменим предыдущий пример таким образом, чтобы в зави-
симости от параметров выводились несколько различных строк.
@echo off
if "%1"= ="H" goto hcom
if "%1"= ="G" goto gcom
:hcom
echo You run this batch file
echo with parameter H -
echo Hello!
goto ends
:gcom
echo You run this batch file
echo with parameter G -
echo GoodBye!
:ends
Запустим его строкой general G :

15
Подумайте, что будет, если мы запустим его с параметром H.

15. Создание меню выбора с помощью BAT-файла


Одна из самых интересных возможностей BAT-файлов — создание
загрузочных меню. С их помощью можно заставить мирно сосущество-
вать несколько операционных систем, а также автоматизировать некото-
рые стандартные операции. Создаются загрузочные меню путем измене-
ния уже известного нам файла AUTOEXEC.BAT.
Но мы и сами можем написать BAT-файл, который поможет нам ор-
ганизовать простой способ доступа к часто используемым программам.
Например, нам хочется двойным щелчком по иконке на рабочем сто-
ле вызывать специальное текстовое меню, которое бы предлагало вы-
брать программу или игру для запуска. Конечно, можно использовать яр-
лыки на рабочем столе, но рано или поздно их становится столько, что
каждый раз шарить мышкой по экрану попросту надоедает. А зачем каж-
дый раз для запуска любимой игры или программы тянуться в главное
меню, а то и в «Мой компьютер»? Ведь у нас есть возможность писать
BAT-файлы!
Нам требуется BAT-файл, который бы выводил на экран меню со
списком наших любимых программ/игр и предлагал возможность выбора.
Также было бы хорошо, если бы нам не требовалось каждый раз нажи-
мать ENTER — лучше просто нажать клавишу, соответствующую нуж-
ному варианту. Тогда запуск будет быстрым и удобным.
В этом нам поможет команда CHOICE. Давайте посмотрим на текст
BAT-файла.
@echo off
echo Я могу запустить...
echo HalfLife (H)
echo Need4Speed (N)
echo GTA (G)
echo Worms3 (W)
echo ... или выйти (Q)
16
choice /c:HNGWQ "Чего изволите "
if errorlevel 5 goto end
if errorlevel 4 goto worms
if errorlevel 3 goto gta
if errorlevel 2 goto n4s
if errorlevel 1 goto hl
:worms
c:\games\worms3\wa.exe
goto end
:gta
"с:\Program files\gta2\gta.exe"
goto end
:n4s
call c:\games\N4S5\nfsr.bat
goto end
:hl
"с:\Program files\halflife\hl.exe"
:end
Вот и весь BAT-файл. Когда мы запустим его, на экране появится
меню из пяти пунктов. Рядом с каждым пунктом в скобках указана соот-
ветствующая клавиша. Нам достаточно нажать эту клавишу, чтобы запус-
тить ту или иную игру или программу:

А теперь давайте разберемся, как этот BAT-файл устроен.


После того, как мы вывели текст меню командами ECHO, мы исполь-
зуем команду CHOICE. Она отвечает за вывод на экран вопроса и обра-
ботку ответов. После ключа /c: пишутся буквы — варианты ответа. Ес-
ли пользователь в ответ на вопрос нажмет одну из этих букв, переменная
ERRORLEVEL приобретет значение, соответствующее номеру выбран-
ного варианта.
17
Итак, в переменной ERRORLEVEL сохранился номер выбранного
пункта меню. Теперь его надо обработать. Для этого служит конструкция
IF. Это не что иное, как условие, которое проверяется на истинность. Ес-
ли условие истинно, выполняется какое-то действие. Например, в четвер-
той строчке мы сравниваем значение ERRORLEVEL с 2 (этот номер со-
ответствует пункту меню «Need4Speed»). Если значение совпадает (то
есть пользователь выбрал именно этот пункт), выполняется команда
goto n4s. Это команда перехода на метку. Метка служит для перехода
в какую-то часть программы. Найдите строчку, где написано :n4s. Это и
есть метка, на которую перейдёт программа после выполнения команды.
После метки будет выполняться команда запуска игры, а потом — снова
переход — на метку end. На этот раз метка стоит в самом конце BAT-
файла и ни на что не указывает. Выполнение программы заканчивается.
Вот и весь принцип действия.
Зачем нужен последний переход? Если бы его не было, BAT-файл
стал бы выполняться дальше и запустил бы ещё и HalfLife. А это нам со-
всем ни к чему.

16. BAT-файлы и переменные среды


Мы уже познакомились с тем, как в BAT-файлах используются пере-
менные %1, %2 и т.д., связанные с внешними параметрами. Однако в опе-
рационной системе существуют и специальные переменные, которые на-
зываются переменными среды (или переменными окружения);
например, PATH, TEMP и т.п. BAT-файлы могут работать с ними — ус-
танавливать или изменять.
С помощью команды SET можно установить значения переменных
среды. Вызывается эта команда так:
SET <имя_переменной> = <значение>
Например, можно изменить значение переменной PATH:
SET PATH=C:\GAMES\HL;
BAT-файлы могут использовать не только внешние параметры, но и
сами создавать собственные переменные и использовать их в своей рабо-
те:
SET DO_IT=true
:loop
...
IF %DO_IT%= =true GOTO loop
18
Обратите внимание, что при использовании переменных среды или
собственных переменных в качестве параметров команд, их имена об-
рамляются символами процента с двух сторон:
SET PATH=%PATH%;C:\GAMES\HL;

17. Зачем нужен SHIFT


Команда SHIFT позволяет сдвигать параметры BAT-файла таким
образом, что если до ее выполнения второму параметру соответствовала
переменная %2, то после ее выполнения тому же параметру будет соот-
ветствовать переменная %1.
Рассмотрим пример. Напишем файл SH.BAT такого вида:
@echo off
echo %1
echo %2
echo %3
echo ---------------------
echo shift
echo ---------------------
shift
echo %1
echo %2
echo %3
Запустим его с четырьмя параметрами. Например, такими:
SH.BAT one two three four
Смотрим результат:

Если бы мы еще раз выполнили команду SHIFT, все параметры сме-


стились бы еще на одну позицию. SHIFT применяется в тех случаях, ко-
гда заранее неизвестно число параметров BAT-файла.
19
18. Как работают BAT-файлы
Команды бывают внутренними и внешними. Например, ECHO — это
внутренняя команда и исполняет ее COMMAND.COM.
После того как из строки BAT-файла извлекается команда, DOS сна-
чала проверяет, есть ли такая команда внутри COMMAND.COM. Если
там эта команда не найдена, то будет произведен поиск файла с именем
команда и расширением .EXE, .COM или .BAT во всех каталогах, указан-
ных в переменной среды PATH. Посмотрим на рисунок:

Команды ECHO и CLS будут исполнены самим COMMAND.COM. А


команда EDIT не содержится внутри COMMAND.COM. Это — внешняя
команда. Операционная система будет исследовать все доступные пути на
предмет наличия исполняемых файлов с таким именем. Если файл най-
дётся, он будет запущен. Напомним, что список всех каталогов, в которых
будет производиться поиск, хранится в переменной среды PATH.

19. Вызов одного BAT-файла из другого


С помощью команды CALL можно из одного BAT-файла вызывать
другой. В принципе, другой BAT-файл можно вызвать, просто указав его
имя, т.е. запустить его как программу. Но команда CALL обеспечивает не
только запуск другого BAT-файла, но и продолжение работы текущего
BAT-файла после завершения вызванного:
CALL [диск:][путь]имя_файла [параметры_вызова]

20
В разделе 12 мы создали файл KILL.BAT, предназначенный для уда-
ления файлов одного вида и состоящий из одной строчки:
del *.%1
Но что делать, если мы хотим удалить одним махом файлы разных
типов, например .TMP, .BAK, .CHK, .~DO и т.п. (всё это расширения раз-
личных временных файлов)? Неужели нам нужно многократно запускать
файл KILL.BAT с разными параметрами?
Конечно, нет! Используя команды SHIFT и CALL, можно создать
достаточно простой файл DELTMP.BAT, который успешно решает по-
ставленную задачу:
@echo off
:loop
if "%1"= ="" goto end
call kill %1
shift
goto loop
:end
Теперь можем запустить его с соответствующими параметрами:
deltemp tmp bak chk ~do
Как он будет работать?
Сперва система проверит, не является ли первый параметр пустой
строкой (её представляет парная двойная кавычка). Поскольку сразу по-
сле запуска первый параметр равен tmp, выполнится строка
call kill %1
Будет вызван файл KILL.BAT с параметром tmp:
kill tmp
После того, как будут удалены все файлы с расширением .TMP,
управление вновь будет передано файлу DELTMP.BAT на строку
shift
После этого первый параметр уже станет равен bak. По команде
goto loop
программа перейдёт на метку :loop и затем вновь будет проверено, не
является ли первый параметр пустым. Потом вновь будет вызван файл
KILL.BAT, но на этот раз с параметром bak:
kill bak
После очередного выполнения команды SHIFT первый параметр
примет значение chk, и весь цикл повторится.
21
После того, как список параметров файла DELTMP.BAT будет ис-
черпан, выполнение BAT-файла прекратится. Каким образом? Первый
параметр примет значение «пустая строка» и, после проверки истинности
условия
if "%1"= ="" goto end
программа перейдёт на метку :end и прекратит свою работу.
Обратите внимание, что файлу DELTMP.BAT совершенно безраз-
лично, сколько ему будет передано параметров. Если он будет запущен
вовсе без параметров, условие
if "%1"= ="" goto end
выполнится сразу же после запуска, и исполнение BAT-файла немедлен-
но прекратится. Вызова файла KILL.BAT при этом не произойдёт.

20. Работа с файлами из BAT-файлов


Задачу, описанную в предыдущем разделе, можно решить ещё про-
ще, если применить команду FOR:
FOR %%<переменная> IN <файлы> DO <команда>
Команда FOR выполняет указанную команду для каждого файла в
наборе файлов.
Вот, например, как мог бы выглядеть файл DELTMP.BAT:
@echo off
for %%c in (%1, %2, %3, %4) do call kill %%c
Сложно? Непонятно? Тогда вот вам другой пример.
Нам нужно создать на диске папки с именами «A», «B», «C» и т.д.
Пишем BAT-файл:
@echo off
for %%a in (A B C D E) do md %%a
Просто, неправда? И главное — быстро. Пример можно усложнить,
добавив к созданию папки копирование в нее какого-либо файла, что на-
пример, может быть полезно при копировании данных на дискету. Резер-
вирование данных в пяти папках, скорее всего, поможет считать записан-
ную информацию даже с сильно повреждённой дискеты.
Эти же команды можно набирать непосредственно в командной
строке, но тогда вместо %%a (два символа процента) пишется %а (один
символ процента).

22
ПРИЛОЖЕНИЯ

1. Переназначение и конвейерная обработка


По сравнению с DOS, у Windows появился удобный и практичный
интерфейс и куча новых возможностей. Но при этом были и серьезные
потери. Одной из самых болезненных потерь являются функции конвей-
ерной обработки данных. Действие, которое в DOS можно было сделать
одной командой, в Windows приходится делать вручную иногда часами.
Но ведь DOS у нас остался, а значит, можно использовать его возможно-
сти на все сто. Образуется очень симпатичный симбиоз: со стороны
Windows — удобство, комфорт и простота, а со стороны DOS — прак-
тичность и функциональность.

1.1. Переназначение
Для начала рассмотрим операцию переназначения. По умолчанию
каждая команда выводит все результаты своей деятельности на экран и
получает входные параметры с клавиатуры. В некоторых случаях это бы-
вает неудобно. Вот для таких случаев и предназначены команды перена-
значения.
Для того чтобы показать программе, что надо выводить результаты
своей работы не на экран, а куда-то еще, используется символ >. В общем
случае такая конструкция выглядит как
команда > адресат
Где это может быть полезно? Например, вы хотите приклеить над
монитором дерево папок вашего жесткого диска. Список надо распеча-
тать. Как это можно быстро сделать в Windows? Очень сложно. А в DOS
можно просто набрать строчку tree > prn, и из принтера тотчас же
полезет бумага с распечатанным деревом папок.
Слово prn в любых конструкциях обозначает принтер. Это так назы-
ваемая объектная переменная. В DOS есть еще несколько интерес-
ных объектных переменных. Самая полезная из них — nul. То есть ни-
что, пустота. Что будет, если что-нибудь отправить в пустоту? Да ничего
не будет. Но, по крайней мере, это что-то определенно не выведется на
экран. Например, если в AUTOEXEC.BAT в конце каждой строчки допи-
сать > nul, то во время загрузки системы на экране не появятся надоед-
ливые сообщения, что у нас установлена такая-то кодовая страница, что

23
наш CD-ROM не нашел своих драйверов, и т.д. Кто ценит свои нервы —
может убрать эти надписи описанным выше способом.
Результат работы любой команды можно также сбросить в файл. На-
пример, если набрать
dir > dir.txt
то в файле DIR.TXT окажется список папок текущего каталога. Причем,
если этот файл не существовал, он будет создан, а если существовал — то
перед записью полностью очистится. Чтобы содержимое файла не стер-
лось, а новая запись добавилась к предыдущим, надо просто использовать
вместо одинарного знака двойной, то есть >>.
Таким способом очень удобно вести системные логи — записывать в
специальный файл результат работы всех запускавшихся программ. Эта
возможность будет особо полезна для системных администраторов. Да и
в юзерском хозяйстве может пригодиться.
Существует еще один символ переназначения: <. В противополож-
ность предыдущей директиве, он сообщает команде не куда отправить
результат своей работы, а откуда принимать.
Например, вы часто пользуетесь какой-то составной командой с ку-
чей параметров. Надоело каждый раз набивать ее? Просто запишите все
эти ключи и параметры в файл, а потом наберите только саму команду и
имя файла. Вот так:
команда < источник
Таким способом можно «обмануть» некоторые программы, требую-
щие, чтобы пользователь многократно подтверждал свои действия нажа-
тием тех или иных клавиш. В качестве примера приведём командную
строку, которая позволит Вам быстро отформатировать дискету без уто-
мительного трёхкратного подтверждения.
Нам потребуется один файл (скажем, TEMP.TMP), в котором будут
записаны все клавиши, необходимые для подтверждения. В нашем случае
это «Enter, Enter, No, Enter», т.е. вам необходимо в блокноте нажать два
раза ENTER, написать символ n и нажать ENTER еще раз, сохранить и за-
крыть файл. Теперь можно приступить непосредственно к форматирова-
нию с помощью команды
C:\WINDOWS\COMMAND\format a: /q < temp.tmp
(параметр /q означает быстрое форматирование).

24
1.2. Конвейерная обработка
Теперь перейдем к командам конвейерной обработки. Все эти коман-
ды пишутся после основной команды (а также всех ее параметров) и на-
чинаются с символа | (вертикальная черта). Суть конвейера состоит в
том, что все результаты работы одной программы передаются на после-
дующую обработку другой программе.
Самый наглядный пример — команда |more. Она организует по-
страничный вывод на экран информации, переданной ей предыдущей
программой. Команда очень полезна в сочетании с теми командами, для
которых не действует ключ /p (выводить постранично).
Конвейерную обработку можно производить абсолютно любыми ко-
мандами. И всегда первая программа передает результат своей работы
следующей. Это уже элементы программирования.
Так, например, конструкция
dir|sort
выведет на экран список всех папок, отсортированный по алфавиту.
Разные команды и конструкции можно объединять. Возможна такая
строка:
find "реферат"|sort > prn
Как вы думаете, что сделает эта команда? Она найдет все файлы в те-
кущей папке, в которых встречается слово реферат, отсортирует их по
алфавиту и полученный список распечатает.
Обратите внимание: данные как бы по эстафете передаются от одной
команды к другой. Кто-то еще сомневается в наличии у «забытого DOS»
мощных возможностей?!

25
2. Команды BAT-файлов

@ запрет выдачи на экран текста команды


CALL <путь> <имя файла>
вызывает один BAT-файл из другого
ECHO выводит сообщения или включает/выключает режим отображения
команд на экране
echo on разрешить вывод сообщений на экран
echo off запретить вывод сообщений
FOR %%<переменная> IN <набор файлов> DO <команда>
выполняет указанную команду для каждого файла в наборе фай-
лов
GOTO <метка>
осуществляет переход на метку в тексте BAT-файла
IF <условие> <команда>
выполнение команды только при верности условия
IF NOT <условие> <команда>
команда будет выполнена, только если условие ложно
Условия:
exist <путь> проверка на наличие файлов в каталоге
%n= = проверка значения какого-то конкретного параметра
LH <имя файла> (или LOADHIGH <имя файла>)
загружает программу в верхние адреса памяти
PAUSE <сообщение>
приостанавливает выполнение BAT-файла и отображает соответ-
ствующее сообщение
PATH=<путь>
отображает или устанавливает путь поиска, т.е. каталоги (папки), в
которых надо искать исполняемые файлы, заданные только своим
именем. Длина пути поиска — 256 символов
REM <комментарий>
отмечает комментарии (примечания) в BAT-файле. Комментарии
не являются командами, а потому не выполняются при запуске
BAT-файла и не выводятся на экран (если не включен режим
echo on)
SET <переменная>=<значение переменной>
устанавливает значение переменой среды DOS
SHIFT сдвигает позицию подставляемых параметров в BAT-файле
26
3. Основные команды DOS, использующиеся
при написании BAT-файлов

BREAK устанавливает или отменяет проверку комби-


нации [Ctrl+C]
CD (или CHDIR) отображает имя или изменяет имя текущего
каталога
CLS очищает экран
COMMAND стартует новую копию интерпретатора команд
COPY копирует один или больше файлов в другой
каталог или под другим именем
DATE отображает или устанавливает дату
DEL (или ERASE) удаляет один или более файлов
DIR отображает список файлов и подкаталогов в
каталоге
FIND ищет текстовую строку в файле или файлах
FORMAT форматирует диск
MD (или MKDIR) создает каталог (директорию, папку)
MODE конфигурирует системное устройство
MORE обеспечивает постраничный вывод информа-
ции на экран
PRINT печатает текстовый файл
PROMPT изменяет вид приглашения командной строки
RD (или RMDIR) удаляет каталог (директорию, папку)
REN (или RENAME) переименовывает файлы или каталоги
START открывает отдельное окно для выполнения
указанной программы или команды
TIME отображает или устанавливает системное время
TYPE отображает содержимое текстового файла
VER отображает версию операционной системы

27