5.9.5. Примеры командных файлов
1. Командный файл SHOWANY.BAT, обеспечивающий постраничное отображение
содержимого заданного текстового файла (с паузой после заполнения каждого
экрана):
@ЕСНО OFF
IF /%1 = / GOTO ERROR1
IF NOT EXIST %1 GOTO ERROR2
MORE <%1
GOTO END
:ERRORl He задан аргумент
ECHO Вы должны
специфицировать файл
GOTO END
:ERROR2 Файл отсутствует
ECHO Файл %1 отсутствует
:END
2. Командный файл SHIFTEST.BAT для исследования работы команды SHIFT:
©ECHO OFF
ECHO %0
:BEGIN
IF = =GOTO
END
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
GOTO BEGIN
:END
После его подготовки попробуйте задать
SHIFTEST ABCDEFGHIJKLMNOPQRS
3. Командный файл ASMTOCOM.BAT для получения СОМ - программы из программы
на языке Макроассемблера:
@ЕСНО OFF
MASM %1
LINK %1
EXE2BIN %1 %1.СОМ
Если программа на языке Макроассемблера находится в
файле MYPROG.ASM, то для ее обработки в ответ на приглашение DOS следует ввести
ASMTOCOM MYPROG
Расширение
специфицировать нельзя.
4. Командный файл SETPATH.BAT, обеспечивающий добавление маршрутов поиска
исполняемых файлов к уже имеющимся и отображение всех установленных маршрутов:
©ECHO OFF
:START
IF /%1= =/ GOTO END
SET PATH=%PATH%; %1
SHIFT
GOTO START
:END
PATH
Пример использования:
SETPATH
C: \ EDITORS \ TEXT\ME C: \ DOS33
Рассмотренный командный файл работает нормально,
только если значение глобальной переменной PATH помещается на одной строке экрана.
5. Командный файл DELBAK.BAT для удаления резервных копий файлов
(ВАК-файлов) из заданного каталога, если он указан, или из рабочего каталога,
если аргумент не специфицирован:
@ЕСНО OFF
SET #DIR=
IF NOT /%1= = / SET #DIR=%1\
IF EXIST %#DIR%*.BAK GOTO DELETE
ECHO Нет ВАК-файлов
для удаления
GOTO END
:DELETE
DIR %#DIR%*.BAK
ECHO Если Вы не хотите
удалять перечисленные файлы,
ECHO то нажмите Ctrl-Break, а иначе -
ECHO любую клавишу для
продолжения
PAUSE >NUL
ECHO *** Файлы удалены
***
:END
В этом файле использована глобальная переменная с
уникальным именем #DIR. Сначала ее значение сбрасывается командой SET, чтобы оно обязательно было пустым, а не осталось установленным после
предыдущего вызова файла DELBAK.BAT. Затем, если аргумент задан, то к нему справа приписывается символ \ и
результат сохраняется в качестве значения глобальной переменной #DIR. В' последующих командах оно применяется в качестве префикса к
составным именам ВАК-файлов. Имейте в виду, что указание d: в качестве аргумента приведет к удалению
ВАК-файлов не в текущем, а в корневом каталоге диска в приводе d. Поэтому если Вам требуется задать текущий каталог, то используйте
конструкцию d:. .
6. Командный файл LEX.BAT для вызова текстового редактора ЛЕКСИКОН с
автоматической загрузкой в него последнего из ранее использованных для этой же
цели текстовых файлов:
@ЕСНО OFF
IF /%1= =/ GOTO NOARG
SET #DOC = %l
:NOARG
LEXE %#DOC%
CLS
Здесь предполагается, что файл LEX.EXE переименован в LEXE.EXE, чтобы не возникало коллизий с файлом LEX.BAT. Если в ответ на приглашение DOS ввести
LEX C: \TXT \MYFILE.TXT
то спецификация указанного файла будет запомнена в глобальной
переменной #DOC, а сам файл — загружен в редактор. Значение
#DOC будет затем использоваться при запуске файла LEXEEXE командной строкой LEX без аргумента, обеспечивая загрузку в
редактор последнего из заданных файлов.
7. Командный файл BLANK.BAT для гашения экрана
на период до нажатия любой клавиши:
PROMPT $e[0;30m$e[2J
PAUSE
PROMPT $e[0m
CLS
@ECHO OFF
PROMPT $P$G
Для того чтобы понять работу этого командного файла,
нужно ознакомиться с материалом, изложенным в п. 5.11.1. Файл BLANK.BAT гасит экран
дисплея и оставляет его в таком состоянии до тех пор, пока не будет нажата
какая-либо клавиша. Этот файл полезно использовать при непродолжительных
перерывах в работе, чтобы, не выключая ПЭВМ, погасить экран и тем самым
продлить срок его службы. Часто же выключать и включать ПЭВМ не рекомендуется.
Первой строкой файл BLANK.BAT посылает Escape-последовательность ←[0;30m←[2J на экран, а
драйвер ANSI.SYS перехватывает и интерпретирует ее. Нуль задает обычные атрибуты
монохромного экрана (фон — черный); 30т устанавливает черный цвет для текста,
чтобы последующие сообщения были невидимыми, а символы 23 обеспечивают очитку экрана. Команда PAUSE приостанавливает
интерпретацию командного файла. После нажатия произвольной клавиши выполнится
вторая команда PROMPT, и экран вернется к своему нормальному
состоянию. Третья же команда PROMPT установит удобную подсказку DOS. Команду ©ECHO OFF нельзя выдать в начале командного файла, так как в этом случае Escape-последовательности не будут посланы на экран и поэтому не будут
перехвачены драйвером ANSI.SYS. Команда CLS необходима (по
крайней мере, в PC DOS 3.3 и MS-DOS 4.0) для «срабатывания» предшествующей ей PROMPT.
8. Для автоматического ответа на запрос команды DOS или программы в командном файле можно использовать следующую схему:
…
ECHO Y >YES
process <
YES
…
Команда ECHO создает текстовый
файл YES с ответом Y, затем содержимое файла YES подается на стандартный ввод процесса, чем имитируется ввод ответа Y с клавиатуры. После завершения процесса файл YES удаляется. Естественно, аналогичным образом можно задать любые
требуемые ответы.
Недостаток описанного способа состоит в необходимости
создания и удаления файла, что требует много времени. Устранить этот недостаток
можно путем создания постоянных текстовых файлов с различными вариантами
ответов и их использования во всех командных файлах.
Еще один, по всей видимости наилучший, способ автоматического
ввода ответа в процесс состоит в использовании строки вида
ECHO Y \process
9. Если Вы хотите иметь команды для сохранения
рабочего каталога в определенный момент и его восстановления после установки
нового рабочего каталога, то создайте, например, в каталоге C:\BAT следующие файлы:
CDFILE: CD
SAVEDIR.BAT: @ЕСНО OFF
CD > C:\BAT\CURDIR
COPY С: \ BAT \ CDFILE + C: \ BAT \ CURDIR C: \ BAT \ RETURN.BAT
Текстовый файл CDFILE содержит «начало» команды CD. Его нужно
сформировать аккуратно, по крайней мере, с одним пробелом после CD и без маркера EOL. Командный файл SAVEDIR.BAT обеспечивает запись спецификации рабочего
каталога в текстовый файл CURDIR и формирование
командного файла RETURN.BAT для восстановления
этого каталога.
Для удобства работы одним из маршрутов поиска
исполняемых файлов должен быть C: \ BAT.
Пусть рабочим является каталог C: \ EDITORS\TEXT \ LEX. Если вызвать командный файл SAVEDIR (без аргументов),
то будет сформирован командный файл RETURN, содержащий
команду
После этого можно менять рабочие каталоги командой CD (но не командой d:!). Для возврата в LEX достаточно будет ввести с клавиатуры RETURN.
Каждое последующее выполнение файла SAVEDIR отменяет действие предыдущего без возможности восстановления.
Описанная техника облегчает работу в случае наличия
на жестком диске разветвленной файловой структуры.
10. Командный файл FULLCOPY.BAT для резервирования содержимого жесткого
диска на дискетах в приводе А:
@ЕСНО OFF
ATTRIB +А С:\*.* /S
:
ECHO Установите
отформатированную дискету в привод А
ECHO и затем нажмите
любую клавишу
PAUSE >NUL
XCOPY С:\*.* A: /S /М /Е /V
IF ERRORLEVEL 4 GOTO LOOP
ECHO Резервирование завершено
Команда ATTRIB устанавливает
атрибут А у всех файлов. XCOPY копирует на
дискету в приводе А файловую структуру с жесткого диска. У всех скопированных
файлов атрибут А сбрасывается. Выполнение правильно заданной команды XCOPY (а в данном случае это так) завершается в одном из следующих случаев:
1) дискета заполнена, но не все файлы еще
зарезервированы (код возврата 4);
2) все файлы зарезервированы, файлов для копирования
не найдено или
выполнение команды прервано по Ctrl-Break (коды возврата 0, 1
и 2 соответственно);
3) произошла критическая ошибка ввода-вывода (код
возврата 5).
В случаях 1 и 3 команда IF передает управление на метку LOOP для продолжения
(возобновления) резервирования на следующей дискете. При этом уже скопированные
файлы не резервируются, так как их атрибуты А сброшены.
Если произошел случай 2, то резервирование
завершается с выдачей соответствующего сообщения.
Конечно, можно ввести дополнительный анализ кода
возврата 5.
В MS-DOS 4.0 рассмотренный
командный файл не используйте, так как в команде XCOPY имеется ошибка (при нехватке места на целевом диске выдается код
возврата 0).
11. Резервирование всего содержимого жесткого диска
требует много времени и большого количества дискет. Поэтому при повторном
резервировании лучше в команде XCOPY использовать
переключатель /D для копирования только тех файлов, которые
созданы и обновлены после даты последнего резервирования. При этом для
корректного выбора файлов требуется обеспечить работу DOS все время с правильной датой (см. описание команды DATE в п. 5.6.5).
Кроме того, пользователю нужно запоминать или
записывать дату последнего резервирования файлов для указания ее в
переключателе /D. Чтобы избавиться от этого, можно создать
следующие командные файлы:
DATECOPY.BAT: ©ECHO OFF
CALL BACKDATE
ECHO I MORE
I DATE I FIND /V "Enter"
> BACKDATE.BAT
CURRENT. BAT: ©ECHO OFF
ATTRIB +A G:\*.* /S
:
ECHO
Установите
отформатированную
ECHO
дискету в привод А
PAUSE >NUL
XCOPY C:\*.* A: /S /М /Е /V /D:%4
IF
ERRORLEVEL 4 GOTO LOOP
ECHO
Резервирование закончено
Для того чтобы использовать эти файлы, нужно
единственный раз сформировать файл BACKDATE.BAT с помощью команды
ECHO | MORE | DATE | FIND /V
"Enter" > BACKDATE.BAT
Этот файл будет содержать только строку, аналогичную
следующей:
Current date is Sat 1-26-1991
(Текущая дата — суббота
26.01.1991 г.)
Действительно, команда MORE при отсутствии
подлежащего отображению текста (от команды ECHO) генерирует маркер EOL и тем самым
моделирует нажатие клавиши Enter в ответ на запрос
текущей даты командой DATE. Команда же FIND отсекает из вывода команды DATE вторую строку (Enter new date (dd-mm-yy):).
Можно создать файл BACKDATE.BAT и любыми другими средствами, но его
содержимое обязательно должно иметь указанный вид.
Для резервирования новых файлов (созданных в день последнего
резервирования или позже) теперь достаточно инициировать выполнение командного
файла DATECOPY. Он вызывает файл BACKDATE.BAT, который интерпретируется как командный. При этом запускается
командный файл CURRENT.BAT с четырьмя
аргументами (date, is, день недели и
дата). Четвертый аргумент (дата) замещает параметр %4 в переключателе /D команды XCOPY. После завершения резервирования управление
возвращается в файл DATECOPY.BAT и выполняется
команда DATE, обновляющая файл BACKDATE.BAT текущей датой, т.е. датой последнего
резервирования. Поэтому после запуска DATECOPY через некоторый
период времени резервирование пройдет в соответствии с ожиданиями (будут
скопированы все файлы с учетом даты в BACKDATE.BAT).
В MS-DOS 4.0 данные командные файлы не используйте по той же причине, что и
командный файл из предыдущего примера.