На главную Назад
Добро пожаловать, уважаемый посетитель!

Содержание

Введение

1. Выполнение командных файлов

2. Вызов командных файлов с возвратом. Команда Call

3. Параметры в командных файлах

3.1. Общие сведения

3.2. Символические имена параметров командного файла

3.3. Команда Shift

4. Переменные среды MS-DOS и работа с ними в командных файлах

4.1. Общие сведения

4.2. Доступ к переменным среды MS-DOS в командном файле

5. Управление отображением команд на экране

5.1. Команды 'Echo on' и 'Echo off'

5.2. Командный префикс @

6. Вывод сообщений в командных файлах

6.1. Команда Echo

6.2. Получение звукового сигнала

6.3. Вывод пустой строки

6.4. Вывод сообщений в файл

7. Комментарии в командных файлах

8. Паузы в командных файлах

9. Выполнение команды для набора файлов. Команда For

10. Организация переходов в командных файлах

10.1. Метки

10.2. Переходы. Команда Goto

11. Проверка условий в пакетных файлах. Команда IF

12. Диалог с пользователем в командных файлах. Команда Choice

Литература

 

 

 

Введение

Довольно часто в процессе работы с компьютером обнаруживается, что необходимо повторять одни и те же команды MS-DOS (может быть, с небольшими изменениями) для того, чтобы осуществить некоторые периодически выполняемые действия. Операционная система MS-DOS позволяет записать нужную для этого последовательность команд в специальный текстовый файл, называемый командным файлом. Командный файл должен иметь расширение .bat, которое произошло от английского слова 'batch' - пачка, пакет. В этой связи командные файлы часто называются пакетными файлами. Именно по расширению .bat командные файлы отличается операционной системой от файлов других типов. Последовательность команд, записанную в файле, можно выполнить, набрав имя пакетного файла (расширение .bat при этом можно не указывать).

 

Пример. Для удаления ненужных файлов и оптимизации размещения файлов на жестком диске (иначе говоря, "сжатия" диска) можно использовать такую последовательность команд:

C:

Cd\

Del Temp\*.*

Defrag C: /f

- Переход на диск С:.

- Переход в корневой каталог.

- Удаление временных файлов в каталоге 'C:\Temp'.

- Дефрагментация диска С:.

 

Чтобы не набирать каждый раз эти команды вручную, запишем их в текстовый файл, располагая каждую команду на отдельной строке. Данный файл назовем 'Compact.bat' и сохраним его в каталоге, где находятся служебные файлы и команды MS-DOS. Обычно этот каталог называется 'C:\Dos'. Если теперь ввести команду 'Compact', тогда автоматически выполнится содержащаяся в нем последовательность команд.

 

 

1. Выполнение командных файлов

Рассмотрим действия, которые необходимо предпринять для запуска командных файлов, а также то, как они выполняются операционной системой MS-DOS.

1. Для выполнения пакетного файла, находящегося в текущем каталоге или в одном из каталогов, указанных в команде Path файла Autoexec.bat, выполняемого при загрузке MS-DOS, достаточно просто ввести имя этого файла и параметры, отделенные друг от друга пробелами (подробнее об обработке параметров в командных файлах см. п.3). Расширение имени командного файла (т.е. .bat) можно не указывать.

2. Для выполнения пакетных файлов, не находящихся в текущем каталоге или в одном из каталогов, указанных в команде Path, следует обязательно указывать полный путь к каталогу, в котором находится пакетный файл, его имя и передаваемые ему параметры. Общий вид команды вызова пакетного файла будет таким:

 

(диск:) (\путь\) имя-командного-файла (пар1 пар2 : парk)

Здесь пар1 пар2 : парk - параметры командного файла.

 

Пример. Пусть текущий каталог - 'C:\Doc\Work', а надо выполнить командный файл 'Account.bat', находящийся в каталоге 'C:\Doc\Batch', и указать ему два параметра: 'Bill.doc' и '/Р'. Для выполнения этого пакетного файла нужно ввести следующую команду:

C:\Doc\Batch\Account Bill.doc /P

или команду

..\Batch\Account Bill.doc /P

3. Выполнение командного файла можно прервать, нажав комбинацию клавиш  Ctrl  +  C или  Ctrl  +  Break . После этого на экране появится запрос:

Terminate batch job (Y/N)?

который означает

Прервать выполнение пакетного файла (Да/Нет)?

Если ответить  Y то выполнение пакетного файла будет окончено, а оставшиеся невыполненные команды будут проигнорированы. Если ответить  N , то выполнение пакетного файла будет продолжено.

4. Если вынуть дискету, на которой расположен выполняемый в данный момент командный файл, то перед выполнением следующей команды MS-DOS попросит снова вставить эту дискету в дисковод.

5. Из одного командного файла можно вызвать другой командный файл, просто указав его имя (и, если надо, полный путь к нему и параметры). Однако после окончания работы вызванного файла выполнение исходного командного файла продолжено не будет. Если требуется выполнить другой командный файл, а затем продолжить выполнение исходного командного файла, тогда следует использовать команду Call (см. ниже).

6. В MS-DOS, начиная с версии 6.2, возможно вызвать пакетный файл в пошаговом режиме. Это может быть очень удобно для его отладки. Формат команды:

Сommand /Y /С имя-командного-файла (параметры)

Текст каждой команды будет выводиться перед выполнением на экран. Для выполнения команды надо нажать клавишу  Y или  Enter , для пропуска команды -  N или  Esc .

2. Вызов командных файлов с возвратом. Команда Call

 

Если из командного файла вызвать другой командный файл, вставив в него имя этого командного файла с необходимыми параметрами, то после завершения вызванного файла возврата управления в исходный командный файл не произойдет. Если же такой возврат необходим, следует использовать команду Сall. Формат команды:

Сall имя-командного-файла (параметры)

Команда Call вызывает выполнение командного файла из другого командного файла. Если в командной строке указаны какие-либо параметры, кроме имени командного файла, то эти параметры передаются командному файлу, они доступны там по символическим именам %1 - %9. После завершения вызванного командой Call командного файла выполнение исходного командного файла продолжается со следующей после нее команды.

 

Замечание. В команде Call не допускается перенаправление ввода-вывода (т.е. использования символов '<', '>' и '|').

3. Параметры в командных файлах

3.1. Общие сведения

Часто приходится выполнять одни и те же команды или последовательности команд MS-DOS с весьма небольшими отличиями. Например, для трансляции программы на Фортране с помощью транслятора фирмы Microsoft надо набирать команды типа:

fl /4I2 /AL /Ox /PP187 /с имя-файла

Чтобы упростить вызов транслятора, можно создать файл Fort.bat следующего содержания:

fl /4I2 /AL /Ox /PP187 /с %1

Здесь символическое имя %1 означает первый параметр, указанный при вызове пакетного файла. Например, если ввести команду 'Fort Simpson.for', тогда вместо %1 будет подставлено 'Simpson.for' и тем самым будет выполнена команда:

fl /4I2 /AL /Ox /PP187 /с Simpson.for

3.2. Символические имена параметров командного файла

В командном файле одновременно можно иметь доступ к девяти параметрам, которые обозначаются как %1, %2, ..., %9. Если при вызове командного файла задано меньше девяти параметров, тогда "лишние" символические имена в качестве значений хранят в себе пустые строки. Если нужно обработать в командном файле более девяти параметров, тогда следует применить в нем команду Shift (см. п.4.3).

 

Символическое имя %0. В командном файле можно использовать также символическое имя %0, в котором изначально хранится имя выполняемого командного файла (в той форме, в которой оно указано в команде, вызвавшей данный командный файл).

 

Использование символа %. Если в командном файле знак процента используется не для обозначения параметров, а для других целей, то его надо набрать дважды. Так, чтобы в командном файле указать файл 'xyz%.com', надо написать в нем строку 'xyz%%.com'.

3.3. Команда Shift

 

Иногда в командном файле требуется применить более девяти параметров, либо выполнить одинаковую обработку для всех параметров командного файла. В этих случаях следует использовать команду Shift. Если она встречается в командном файле, тогда символические имена его параметров приобретают новые значения: в %0 попадет прежнее значение из %1, в %1 - прежнее значение из %2 и т.д. В %9 будет помещено значение десятого параметра из командной строки, а если он не задан, тогда новое значение %9 - пустая строка. Команду Shift можно использовать несколько раз.

 

Пример. Пусть командный файл 'Dummi.bat' вызван следующей командной строкой:

Dummi а bb сcc

Тогда %0 = 'Dummi', %1 = 'а', %2 = 'bb', %3 = 'ccc', а параметры с %4 по %9 содержат пустые строки. После однократного выполнения команды Shift имеем: %0 = 'а', %1 = 'bb', %2 = 'ccc', а параметры с %3 по %9 содержат пустые строки.

4. Переменные среды MS-DOS и работа с ними в командных файлах

4.1. Общие сведения

Операционная система MS-DOS имеет специальную область памяти, называемую средой или окружением (от англ. environment), в которой хранится набор символьных строк, доступных во всех программах и командных файлах. Каждая строка в окружении MS-DOS имеет вид:

 

имя-переменной = значение,

 

Здесь имя-переменной - это строка символов, без знаков равенства и пробелов, а значение - любая строка символов.

4.2. Доступ к переменным среды MS-DOS в
командном файле

Для установки переменных окружения в командных файлах используется команда Set. Формат команды:

Set переменная = значение

При выполнении этой команды MS-DOS преобразует в имени переменной, но не в ее значении, все строчные буквы в заглавные.

В командных файлах можно обратиться к значению какой-либо переменной окружения, для этого следует указать ее имя, обрамленное с обеих сторон знаками процента.

 

Пример №1. Для вывода на экран значения переменной окружения Temp в командном файле можно воспользоваться такой командой:

Echo %Temp%

Пример №2. Чтобы удалить все временные файлы в каталоге, заданном в переменной окружения Temp, в командном файле можно воспользоваться такой командой:

Del %Temp%\*.*

5. Управление отображением команд на экране

5.1. Команды 'Echo on' и 'Echo off'

 

По умолчанию команды пакетного файла выводятся на экран перед выполнением. Если в него вставить команду 'Echo off', тогда выполняемые за ней команды не будут выводиться на экран. Команда 'Echo on' включает режим вывода выполняемых команд на экран. Команда Echo без параметров выводит на экран сообщение о том, включен или выключен режим дублирования команд на экран.

5.2. Командный префикс @

Можно избежать вывода (дублирования) на экран любой отдельной строки командного файла. Для этого надо поставить в начале этой строки символ '@'. В частности, можно избежать выдачи на экран команды 'Echo off', поставив перед ней символ '@': '@Echo off'.

 

Замечания:

1. Обычно в качестве первой строки командного файла используется команда '@Echo off'. При этом строки командного файла на экран не выводятся.

2. После выдачи команды '@Echo off' иногда полезно использовать команду Cls - "очистка экрана", чтобы сделать более удобным просмотр сообщений, выводимых из командного файла.

6. Вывод сообщений в командных файлах

6.1. Команда Echo

 

Данная команда позволяет выдавать из командного файла сообщения на экран. Формат команды:

Echo сообщение

Указанное сообщение выводится на экран даже тогда, когда режим вывода исполняемых команд на экран выключен командой 'Echo off'. Сообщение не может быть пустым или равным зарезервированному слову 'on' или 'off', так как команды 'Echo on' и 'Echo off' управляют режимом вывода исполняемых команд на экран, а команда Echo без параметров сообщает, включен или выключен режим дублирования команд на экран.

 

Замечания.

 

1. В сообщении не следует употреблять символов '<', '>' и '|' - они интерпретируются как символы перенаправления ввода-вывода.

2. Перед командой 'Echo сообщение' желательно выполнить команду '@Echo off', чтобы сообщение не выводилось на экран дважды.

6.2. Получение звукового сигнала

С помощью команды Echo можно получить звуковой сигнал компьютера. Для этого следует в выводимое сообщение включить символ с кодом 7. Это можно сделать, нажав клавишу  Alt и, не отпуская ее, клавишу  7Home в правой части клавиатуры.

6.3. Вывод пустой строки

Чтобы вывести на экран пустую строку, а это может понадобиться для повышения удобочитаемости сообщений, можно использовать команду:

Echo.

Точка должна следовать сразу за словом 'Echo'. Другой вариант - вывести сообщение, состоящее из одного символа с кодом 255, который при выводе на экран никак не отображается.

6.4. Вывод сообщений в файл

С помощью символа перенаправления ввода-вывода '>' можно выводить сообщения не на экран, а в файл.

Для добавления строки с сообщением в конец файла следует применить такую команду:

Echo сообщение >> имя-файла

Замечание. Если файл не существует, тогда он создается.

Для создания файла и запись в него строки с сообщением нужно применить такую команду:

Echo сообщение > имя-файла

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

7. Комментарии в командных файлах

Команда Rem позволяет включать в командный файл комментарии, которые не будут интерпретироваться как команды во время исполнения этого файла. Они могут употребляться для улучшения удобочитаемости командного файла. Если включен режим вывода исполняемых команд на экран, то комментарии выводятся на экран, а если этот режим выключен командой 'Echo off', тогда комментарии в командном файле на экран не выводятся. Формат команды:

Rem любые-символы

Пример:

 

Rem Этот текст является комментарием

Перед комментариями, которые нежелательно выводить на экран даже при отладке, следует ставить символ '@':

@Rem Этот текст является комментарием

Замечание. В комментарии не следует употреблять символы перенаправления ввода-вывода '<', '>' и '|'.

8. Паузы в командных файлах

Во время выполнения пакетного файла может возникнуть необходимость в его приостановке (например, для вставки нужной дискеты). Для этого можно использовать команду Pause. При выполнении этой команды на экран выводится сообщение:

Strike a key when ready ...

которое означает:

Нажмите любую клавишу, когда будете готовы :

После вывода этого сообщения выполнение командного файла приостанавливается. Если нажать любую алфавитно-цифровую клавишу,  Пробел или  Enter  , тогда выполнение командного файла будет продолжено. Если нажать клавиши  Ctrl  +  C или  Ctrl  +  Break  , то будет выведено сообщение:

Terminate batch Job (Y/'N)?

которое означает:

Прервать выполнение пакетного файла (Да/Нет)?

Если ответить  Y  , тогда выполнение командного файла будет прекращено, а оставшиеся команды из командного файла будут проигнорированы. Если ответить  N  , то выполнение командного файла будет продолжено со следующей команды.

 

Замечание. Перед выдачей команды Pause полезно командой 'Echo' вывести сообщение пользователю о необходимых действиях, например вот так:

Echo Вставьте дискету в дисковод А:

Pause

9. Выполнение команды для набора файлов. Команда For

 

Команда For позволяет выполнить некоторую команду для нескольких файлов из указанного списка. Она может употребляться не только в командных файлах, но и вводиться пользователем в командной строке MS-DOS. Формат команды:

For %x in (список)команда

где х - любой символ, кроме '0', '1', :, '9' (это ограничение нужно для того, чтобы не было совпадений с параметрами %0 - %9 в командном файле);

 

список - одно или несколько имен файлов, разделенных пробелами. В именах файлов можно использовать символы '*' и '?';

 

команда - любая программа или команда MS-DOS, кроме команды For. Если в команде употреблено выражение %x, тогда оно заменяется именами файлов из списка.

 

Примеры использования команды For в командной строке MS-DOS:

  1. Для всех файлов из текущего каталога с расширением .asm вызвать макроассемблер MASM:
  2. For %a in (*.asm) do masm %a

  3. Сравнить файлы с расширениями .PAS и .ЕХЕ из текущего каталога с такими же файлами на диске А:
  4. For %b in (*.pas *.exe) do Fc %b A:%b

  5. Копировать все файлы из текущего каталога с именами, начинающимися с цифры, в текущий каталог диска D:

 

For %c in (1 2 3 4 5 6 7 8 9) do Copy %c*.* D:

Замечание. Если команды For используется в пакетном файле, а не в командной строке MS-DOS, тогда вместо аргумента %x надо указывать %%x (см. пример ниже).

 

Пример. Вызов команды For в командном файле. Для того, чтобы команды, приведенные в предыдущем примере, правильно работали в пакетном файле, их надо записать так:

For %%a in (*.asm) do masm %%a

For %%b in (*.pas *.exe) do Fc %%b A:%%b

For %%c in (1 2 3 4 5 6 7 8 9) do Copy %%c*.* D:

Замечание. Если на диске имеются длинные имена файлов или каталогов, созданные в Windows 95/98 или Windows NT, тогда команда For по умолчанию не будет замечать эти имена, а будет обрабатывать только соответствующие им короткие имена. В MS-DOS 7.0 Вы можете переключить команду For на работу с длинными именами. Для этого перед командой For надо выдать команду 'LfnFor On'. Для возврата к работе с короткими именами нужно выдать команду 'LfnFor Off'.

10. Организация переходов в командных файлах

Любой пакетный файл может содержать метки и команды перехода. Это позволяет управлять порядком выполнения содержащихся в нем команд.

10.1. Метки

Любая строка командного файла, начинающаяся с символа двоеточия ':', воспринимается как метка. Имя метки определяется набором символов, следующих за двоеточием до первого пробела или конца строки. Остаток строки, начиная с первого пробела, игнорируется.

10.2. Переходы. Команда Goto

 

Для организации переходов по метке существует команда:

Goto метка

Если метка, указанная в команде Goto, отсутствует в командном файле, тогда его выполнение завершается с ошибкой.

 

Пример:

Goto Tag

 

. . .

:Tag

REM продолжение выполнения командного файла

В этом примере с помощью команды 'Goto Tag' производится переход к строке командного файла, следующей за меткой Tag.

11. Проверка условий в пакетных файлах. Команда IF

 

Команда IF позволяет в зависимости от выполнения некоторых условий выполнять или не выполнять требуемую команду. Формат команды:

IF условие команда

Здесь команда - это любая допустимая команда (в том числе Goto). Эта команда выполняется, если условие в команде IF истинно, в противном случае команда игнорируется.

Строка условие - это одно из приведенных ниже выражений:

ERRORLEVEL число - истинно тогда, когда код завершения предыдущей выполненной программы больше или равен заданному числу. Код завершения устанавливается программами при окончании их работы, по умолчанию этот код равен нулю.

EXIST имя-файла -истинно, если указанный файл существует.

NOT условие -истинно, когда указанное условие ложно.

строка1 == строка2 - истинно, если строка1 и строка2 полностью совпадают. Если в этих строках имеются символы %0, %1, %2, :, %9, тогда вместо них подставляются параметры командного файла.

 

Пример. Создадим командный файл Typ.bat, который выводит указанный как параметр файл на экран. Формат вызова будет: 'Typ имя-файла'. В этом командном файле нужно проверить, задан ли при вызове параметр и существует ли указанный файл. Командный файл Typ.bat имеет следующий вид:

@Echo off

- Отключаем 'эхо'.

IF -%1 == - goto NoParam

- Параметр задан? Если нет, тогда идем на метку NoParam.

IF not exist %1 goto NoFile

- Файл существует? Если нет, тогда идем на метку NoFile.

Type %1

- Выводим содержимое файла на экран.

Goto End

- Переходим в конец.

:NoParam

Echo Задайте параметр!

Goto End

- Выводим сообщение, что нужно задать параметр, затем переходим в конец.

:NoFile

Echo Файл не найден!

- Выводим сообщение, что указанный в качестве параметра файл не найден.

:End

- Конец командного файла.

 

Замечание. Коды возврата, которые имеет смысл проверять с помощью команды 'IF ERRORLEVEL', возвращают следующие программы MS-DOS: ChkDsk, Choice, Defrag, Deltree, DtskComp, DiskCopy, Find, Format, KeyB, Move, MSAV, Replace, Restore, Scandisk, SetVer и ХСору.

 

Сравнение с пустой строкой. Используя в команде IF символьные имена параметров %0 - %9 следует проявлять осторожность. Например, сравнение второго параметра командного файла со строкой 'sss' не следует делать так:

IF %2 == sss :

Дело в том, что если в командный файл передано меньше двух параметров, тогда все символы %2 в нем будут замещены пустой строкой, и при выполнении команды возникнет ошибка из-за того, что аргумент слева от оператора '==' будет отсутствовать. Правильная команда сравнения должна использовать префикс '-' в аргументах:

IF -%2 == -sss ...

Эта команда работает корректно при любом значении параметра %2.

12. Диалог с пользователем в командных файлах. Команда Choice

 

Иногда в командном файле нужно выполнить различные действия по выбору пользователя. Это можно сделать с помощью программы Choice (она содержится в MS-DOS, начиная с версии 6.0). Формат команды:

Choice (/C список-символов) (/Т:символ,число-секунд) сообщение

Параметры:

/C список-символов - указывает допустимые символы, которые может ввести пользователь в ответ на сообщение. Если данный параметр не указан, тогда допустимыми символами будут 'Y' и 'N'. Значение переменной ERRORLEVEL, возвращаемое после завершения команды Choice, устанавливается равным порядковому номеру введенного символа в списке.

 

/Т:символ,число-секунд - когда этот параметр указан, тогда в качестве ответа принимается указанный символ, если пользователь по истечении времени, заданного параметром число-секунд, не нажал ни на одну клавишу.

 

Пример. Команда организации диалога с пользователем в пакетном файле при помощи программы Choice:

 

Choice /C:YN "Запустить программу ALFA"

В результате выполнения данной команды при ответе  Y значение переменной ERRORLEVEL будет установлено равным 2, при ответе  N - равным 1.

 

Замечания:

 

1. Если Вы желаете, чтобы при вводе символов различались прописные и строчные буквы, укажите в команде параметр /S.

 

2. По умолчанию к сообщению добавляется список символов (через запятую в квадратных скобках), допустимых для ответа и знак вопроса. Для того чтобы избежать этого, нужно указать в команде параметр /N.

 

3. Если в сообщении, которое нужно вывести на экран, имеются символы '/', тогда его следует заключить в кавычки.

 

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

@Echo off

Echo Выберите игру: D - DIGGER, Т - TETRIS, С - CAT

Choice /C:DTC "Введите символ"

IF errorlevel 3 goto cat

IF errorlevel 2 goto tet

Digger.exe

goto exit

:tet

Tetris.exe

goto exit

:cat

Cat.exe

:exit

Внимание! Проверку переменной ERRORLEVEL командами IF следует производить в порядке убывания ее возможных значений: сначала нужно проверить ее на самое большое значение, затем - на следующее по убыванию и т.д.

Литература

  1. Фигурнов В.Э. IBM PC для пользователя. Краткий курс. -М.: Инфра-М, 1997. -480с.: ил.
  2. Франкен Г., Молявко С.М. MS-DOS 6.0 для пользователя: -К.: Торгово-издательское бюро BHV, 1993. -480с.: ил.
  3. MS-DOS 6.0. Справочное руководство для пользователей компьютеров IBM PC. -М.: ВА-Принт, 1994. -319с.: ил.
  4. Финогенов К.Г. MS-DOS 5.0. -М.: МП Малип, 1992.
  5. Савельев А.Я., Сазонов Б.А., Лукьянов С.Э. Персональный компьютер для всех. -М.: Высш. шк., 1991.