1. Командный файл S.BAT, обеспечивающий постраничное отображение содержимого заданного текстового файла (с паузой после заполнения каждого экрана):
@ЕСНО OFF
IF /%1==/ GOTO ERR1 если не задан аргумент (имя файла) ,то ERR1
IF NOT EXIST %1 GOTO ERR2 –если отсутствует заданный файл
MORE <%1
GOTO END
:ERR1 He задан аргумент
ECHO Укажите имя файла
GOTO END
:ERR2 Файл отсутствует
ECHO Файл %1 отсутствует
:END
Команда More обеспечивает постраничное (полноэкранное) отображение содержимого текстового файла.
Синтаксис:
MORE [<file]
или
process|MORE.
Фильтр MORE считывает текстовый файл со стандартного устройства ввода-вывода и отображает его содержимое с паузой каждый раз после заполнения экрана дисплея. При этом в последней (нижней) строке экрана выдается сообщение –MORE-. Для вывода следующей страницы достаточно нажать на клавиатуре любую клавишу.
2. Командный -файл S.BAT, обеспечивающий добавление маршрутов поиска исполняемых файлов к уже имеющимся и отображение всех установленных маршрутов:
@EСНО OFF
:START
IF /%1==/ GOTO END
SET PATH=%PATH%;%1
SHIFT
GOTO START
:END
PATH
Команда PATH используется для установки и отображения маршрутов поиска исполняемых файлов.
PATH [dir[;dir]…]
PATH; -отменяет все маршруты поиска.
Исполняемый файл сначала ищется в выделенном по его спецификации каталоге, а затем в каждом заданном каталоге dir.
Если введено только имя команды, то выдаются текущие маршруты поиска.
Пример использования:
S C:\EDIT\TEXT\ME C:\DOS
Рассмотренный командный файл работает нормально, только если значение глобально переменной PATH помещается на одной строке экрана.
3. Командный файл DEL.BAT для удаления ВАК-файлов из заданного каталога, если он указан, или из рабочего каталога, если аргумент не задан
@EСНО OFF
SET #DIR=
IF NOT /%1==/ SET #DIR=%1\
IF EXIST %#DIR%*.ВАК GOTO DEL
ECHO Нет ВАК-файлов для удаления
GOTO END
:DEL
DIR %#DIR%*.ВАК
ECHO Для отказа удаления ,
ECHO нажмите Ctrl-Break, а иначе -
ECHO любую клавишу для продолжения
PAUSE >NUL
DEL %#DIR%*.ВАК
ECHO *** Файлы удалены ***
:END
В этом файле использована глобальная переменная с уникальным именем #DIR. Сначала ее значение сбрасывается командой SET. Это нужно для того, чтобы оно было пустым, а не осталось установленным после предыдущего вызова файла DEL.BAT. Затем, если аргумент задан, то к нему справа приписывается символ \ и результат сохраняется в качестве значения глобальной переменной #DIR. В последующих командах оно применяется в качестве префикса к составным именам ВАК-файлов.
Указание d: в качестве аргумента приведет к удалению ВАК-файлов не в текущем, а в корневом каталоге диска d. Поэтому если требуется задать текущий каталог, то нужно использовать конструкцию d:..
4. Командный файл LEX.BAT для вызова текстового редактора ЛЕКСИКОН с автоматической загрузкой в него последнего из ранее использованных для этой же цели текстовых файлов:
@ЕСНО OFF
IF /%1==/ GOTO N
SET #DOC=%1
:N
LEXICON %#DOC%
CLS
Если в ответ на приглашение DOS ввести
LEX C:\TXT\M.TXT
то спецификация указанного файла будет запомнена в глобальной переменной #DOC, а сам файл - загружен в редактор. Значение #DOC будет затем использоваться при запуске файла LEXICON.EXE командной строкой LEX без аргумента, обеспечивая загрузку в редактор последнего из заданных файлов.
5. Для автоматического ответа на запрос команды OS или программы в командном файле можно использовать следующую схему:
…
ECHO Y >YES
process <YES
DEL YES
…
Команда ECHO создает текстовый файл YES с ответом Y. Затем содержимое файла YES подается на стандартный ввод процесса. Этим имитируется ввод ответа Y с клавиатуры. После завершения процесса файл YES удаляется. Естественно, аналогичным образом можно задать любые требуемые ответы.
Недостаток описанного способа состоит в необходимости создания и удаления файла, что требует много времени. Устранить этот недостаток можно путем создания постоянных текстовых файлов с различными вариантами ответов и их использования во всех командных файлах.
Еще один способ автоматического ввода ответа в процесс состоит в использовании строки вида
ECHO Y|process
6. Командные файлы для сохранения рабочего каталога в определенный момент и его восстановления после установки нового рабочего каталога. Для этого можно создать, например, в каталоге С:\ВАТ следующие командные файлы
Текстовый файл CDFILE содержит «начало» команды CD. Его нужно сформировать с одним пробелом после CD и без маркера EOF. Командный файл SAV.BAT обеспечивает запись спецификации рабочего каталога в текстовый файл CUR и формирование командного файла RETURN.BAT для восстановления этого каталога.
Для удобства работы одним из маршрутов поиска исполняемых файлов должен быть С:\ВАТ.
Пусть рабочим является каталог C\EDIT\TEXT\LEX. Если вызвать командный файл SAV (без аргументов), то будет сформирован командный файл RETURN, содержащий команду
CD C\EDIT\TEXT\LEX
После этого можно менять рабочие каталоги командой CD (но не командой d:). Для возврата в LEX достаточно будет ввести с клавиатуры RETURN.
Каждое последующее выполнение файла SAV отменяет действие предыдущего без возможности восстановления.
Описанная техника облегчает работу в случае наличия на жестким диске разветвленной файловой структуры.
7. Командный файл F.BAT для резервирования содержимого жесткого диска на диск в приводе А:.
@ЕСНО OFF
ATTRIB +А С:\*.* /S архивный файл
:LOOP
ECHO Установите отформатированный диск в привод А
ECHO и затем нажмите любую клавишу
PAUSE >NUL
XCOPY C:\*.* A: /S /M /E /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.
8. Резервирование всего содержимого жесткого диска требует много времени и большого количества дисков. Поэтому при повторном резервировании лучше в команде XCOPY использовать переключатель /D для копирования только тех файлов, которые созданы и обновлены после даты последнего резервирования. При этом для корректного выбора файлов требуется обеспечить работу DOS все время с правильной датой.
Кроме того, пользователю нужно запоминать или записывать дату последнего резервирования файлов для указания се в переключателе /D. Чтобы избавиться от этого, можно создать следующие командные файлы:
D.BAT
@ЕСНО OFF
CALL B
ECHO |MORE|DATE|FIND /V "Enter" >B.BAT
C.BAT
@ECHO OFF
ATTRIB +A C:\*.* /S
:LOOP
ECHO Установите диск в привод А
PAUSE >NUL
XCOPY C\*.* A: /S /M /E /V /D:%4
IF ERRORLEVEL 4 GOTO LOOP
ECHO Резервирование закончено
Для того чтобы использовать эти файлы, нужно один раз сформировать файл BAT с помощью команды
ECHO|MORE|DATE|FIND /V "Enter" >B.BAT
Этот файл будет содержать только строку, аналогичную следующей:
Current date is Sat 1-26-2009
(Текущая дата — суббота 26.01.2009 г.)
Команда MORE при отсутствии подлежащего отображению текста (от команды ECHO) генерирует маркер EOL и тем самым моделирует нажатие клавиши Enter в ответ на запрос текущей даты командой DATE. Команда же FIND отсекает из вывода команды DATЕ вторую строку (Enter new date (dd-mm-yy):).
Можно создать файл B.BAT и любыми другими средствами, но его содержимое обязательно должно иметь указанный вид.
Для резервирования новых файлов (созданных в день последнего резервирования или позже) теперь достаточно инициировать выполнение командного файла D. Он вызывает файл B.BAT, который интерпретируется как командный. При этом запускается командный файл C.BAT с четырьмя аргументами (date, is, день недели и дата).
Четвертый аргумент (дата) замещает параметр %4 в переключателе /D команды XCOPY.
После завершения резервирования управление возвращается в файл D.BAT и выполняется команда DATE, обновляющая файл B.BAT текущей датой, т.е. датой последнего резервирования. Поэтому после запуска DATECOPY через некоторый пepиoд времени резервирование пройдет в соответствии с ожиданиями (будут скопированы все файлы с учетом даты в B.BAT)