Примеры командных файлов

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

DEL %1.OBJ

EXE2BIN %1 %1.СОМ

DEL %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

DEL %#DIR%*.BAK

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

DEL 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 C: \ EDITORS \ TEXT \ LEX

После этого можно менять рабочие каталоги командой CD (но не командой d:!). Для возврата в LEX достаточно будет ввести с клавиатуры RETURN.

Каждое последующее выполнение файла SAVEDIR отменяет действие предыдущего без воз­можности восстановления.

Описанная техника облегчает работу в случае наличия на жестком диске разветвленной файловой структуры.

10. Командный файл FULLCOPY.BAT для резервирования содержимого жесткого диска на дискетах в приводе А:

@ЕСНО OFF

ATTRIB +А С:\*.* /S

:LOOP

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

                                 :LOOP

                                 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 данные командные файлы не используйте по той же причине, что и командный файл из предыдущего примера.