Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
95
Добавлен:
09.02.2015
Размер:
5.1 Mб
Скачать

Глава 2: Командная строка

предложения выполнить определенные действия и предупреждения, направляемые пользователю. Например, команда DIR /P останавливает вывод списка файлов после каждого очередного заполнения площади экрана и выдает сообщение, что вывод будет продолжен после нажатия любой клавиши. Но когда вывод сообщений перенаправлен, экран остается пустым, и кажется, будто компьютер завис.

2.04-04 Сдвоенная правая стрелка

Сдвоенная правая стрелка ( >> ), как и обычная правая стрелка (2.04-03), является командой перенаправления вывода, но действует по-другому в тех случаях, когда выводимое сообщение перенаправляется в уже существующий файл.

При использовании знака сдвоенной правой стрелки содержимое этого файла не теряется; перенаправленное сообщение добавляется сзади к прежнему содержимому этого файла. Все прочие особенности исполнения перенаправления остаются такими же, как и при использовании знака одиночной правой стрелки (2.04-03).

2.04-05 Вертикальный штрих

Вертикальный штрих ( | ) является командой промежуточного перенаправления, т.е. осуществления передачи данных от одной программы к другой. Специально для этого командный интерпретатор COMMAND.COM заранее создает временный файл. Первой исполняется программа, имя которой указано слева от вертикального штриха. Сообщения, которые она направляет в канал STDOUT, перенаправляются на запись в тот самый временный файл. После окончания миссии первой программы на исполнение запускается вторая, имя которой указано справа от знака вертикального штриха. Когда эта вторая программа выдаст запрос на получение данных из стандартного канала ввода STDIN, эти данные будут считаны из того самого временного файла. По завершении исполнения обеих обслуживаемых программ временный файл автоматически уничтожается.

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

ECHO Y | DEL C:\TEMP\*.*

Первым делом сообщение, выводимое командой ECHO (3.11), записывается во временный файл. В данном случае это сообщение состоит из одной буквы Y . Затем запускается на исполнение команда DEL (3.09). Обнаружив маску *.*, она выдает запрос к пользователю: действительно ли он хочет удалить все файлы из каталога C:\TEMP. Но так как в данном случае канал ввода тоже перенаправлен,

– 41 –

Глава 2: Командная строка

пользователю не придется отвлекаться: ответ буква Y – будет сразу считан из подготовленного временного файла.

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

Если команда, указываемая справа от знака промежуточного перенаправления, не запрашивает сведения из созданного временного файла, то команда, указываемая слева от знака промежуточного перенаправления, не обязана выдавать сообщение в канал STDOUT. Поэтому вертикальный штрих потенциально может служить разделителем, позволяющим записывать несколько команд в одной строке. Тем не менее его использование в этой роли нельзя рекомендовать, потому что команда FOR (3.13) позволяет сделать то же самое гораздо быстрее и без обращений к записываемому диску для создания временных файлов.

Примечание 1: промежуточное перенаправление предполагает создание временного файла либо в каталоге, указанном в переменной окружения TEMP, либо в текущем каталоге. Обе эти попытки найти место для записи временного файла, однако, могут кончиться неудачно, если DOS загружен с оптического диска CD-ROM или с диска, защищенного от записи. В таких случаях выдается сообщение о том, что промежуточное перенаправление не может быть исполнено, и тогда команда, указанная справа от знака вертикального штриха, тоже не исполняется.

2.04-06 Знак "эт" ( @ )

Когда знак "эт" указан первым в строке batch-файла, он интерпретируется как команда запрещения отображения этой строки на экране. Поэтому первая строка почти каждого batch-файла начинается со знака "эт", за которым следует команда ECHO OFF. Иногда такое действие знака "эт" ( @ ) оказывается полезным не только в первой строке batch-файла (примеры в разделах 3.13, 6.25-02, 6.25-03).

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

– 42 –

Глава 3.

Команды интерпретатора COMMAND.COM

 

3.01

Break

 

44

3.18

Lock

68

3.02

Call

 

44

3.19

MD

69

3.03

CD

 

46

3.20

Path

70

3.04

CHCP

 

46

3.21

Pause

70

3.05

CLS

 

47

3.22

Prompt

71

3.06

Copy

 

48

3.23

RD

73

3.07

CTTY

 

51

3.24

REM

73

3.08

Date

 

53

3.25

REN

74

3.09

DEL

 

53

3.26

Set

75

3.10

DIR

 

54

3.27

Shift

76

3.11

Echo

 

57

3.28

Time

76

3.12

Exit

 

58

3.29

TrueName

77

3.13

For

 

58

3.30

Type

77

3.14

GOTO

 

61

3.31

Unlock

78

3.15

IF

 

62

3.32

VER

78

3.16

LFNFOR

67

3.33

Verify

79

3.17

LH

 

67

3.34

VOL

79

Встроенные команды это те, которые исполняются интерпретатором, обслуживающим командную строку. В отличие от других программ, которые перед исполнением приходится искать и загружать с диска, резидентный командный интерпретатор постоянно находится в памяти, вследствие чего исполнение его собственных встроенных команд происходит гораздо быстрее. Раз встроенные команды не приходится искать, то и спецификации пути перед их именами быть не должно. Еще одно общее свойство всех встроенных команд состоит в том, что по завершении исполнения они не оставляют код ошибки (errorlevel).

Данная глава представляет набор встроенных команд основного в MS-DOS7 командного интерпретатора COMMAND.COM (размер файла 93812 байт, дата файла 12.06.1996). Национально-адаптированные версии этого интерпретатора обычно имеют ненамного больший размер файла и более позднюю дату, но тем не менее исполняют те же самые команды. Среди представленных здесь команд есть несколько таких, которые предназначены для ввода не с клавиатуры, а только из строк batch-файлов (3.02, 3.14, 3.21, 3.27).

Для большинства встроенных команд в составе COMMAND.COM имеется краткая справка; чтобы ее вывести на экран, надо набрать имя команды, пробел,

– 43 –

Глава 3: Команды интерпретатора Command.com

косую черту и знак вопроса /? , а потом нажать клавишу Enter. Практика показывает, однако, что одной краткой справки бывает недостаточно. В разделах данной главы содержится большое количество дополнений и пояснений, которые

позволят Вам использовать встроенные команды гораздо более эффективно и избежать многих распространенных ошибок.

3.01BREAK – управление перехватом доступа к дискам

Команда BREAK (= прервать) – эквивалент одноименной конфигурационной команды (подробнее в разделе 4.02). Они обе позволяют воздействовать на один и тот же двоичный флаг, от которого зависит проведение проверок нажатий клавиш BREAK и CTRL-C при выполнении дисковых операций. Состояние этого двоичного флага не пропадает вместе с переменными локального окружения, когда вторичный резидентный модуль командного интерпретатора кончит свою работу. В отличие от загрузчика IO.SYS (4.02), интерпретатор COMMAND.COM отвечает на ввод команды BREAK без параметров индикацией текущего состояния упомянутого двоичного флага.

3.02CALL – вызов batch-файла

CALL (= вызвать) – команда для вызова на исполнение одного (вторичного) batch-файла из строки другого (первичного) batch-файла. Batch-файлы это неформатированные текстовые командные файлы с суффиксом *.BAT, из которых интерпретатор Command.com принимает расширенный набор команд. Команда CALL – это как раз одна из тех команд, которые предназначены для ввода не с клавиатуры, а только из строк batch-файлов.

Когда в строке batch-файла командный интерпретатор встречает имя исполняемой программы (утилиты), он передает управление этой программе, а по

завершении ее работы снова берет управление на себя и переходит к интерпретации следующей строки batch-файла. Но когда в строке batch-файла встречается вызов другого (вторичного) batch-файла, командный интерпретатор переходит к интерпретации строк вторичного batch-файла и продолжает это делать до его конца, после чего процесс завершается, не возвращаясь к прерванной интерпретации строк первичного batch-файла. Чтобы прерванное исполнение первичного batch-файла было бы доведено до конца, вторичный batch-файл должен быть запущен на исполнение с помощью команды CALL, например:

CALL C:\DOS\VC4\HELP.BAT J 96

здесь:

– 44 –

Глава 3: Команды интерпретатора Command.com

C:\DOS\VC4\ – пример пути к файлу HELP.BAT; если путь не указан, DOS будет искать этот файл в текущем каталоге, а потом по всем путям, указанным в переменной окружения PATH.

HELP.BAT – пример имени вторичного batch-файла.

J 96 – группа параметров, которая должна быть передана файлу HELP.BAT (другим batch-файлам будут нужны другие параметры или могут быть не нужны вовсе).

Фактически команда CALL предотвращает закрытие первичного batch-файла,

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

Примечание 1: вторичный batch-файл наследует не копии переменных окружения, а доступ к той же области переменных окружения. Значения переменных, присвоенные во вторичном batch-файле, становятся доступны из первичного batch-файла после возобновления его исполнения.

Примечание 2: с помощью команд CALL можно организовать многократно вложенные вызовы batch-файлов.

Примечание 3: команда CALL позволяет осуществлять рекурсивные вызовы, т.е. batch-файл может быть вызван из содержащейся в нем же строки. При этом пользователь сам должен позаботиться об условиях,

предотвращающих неограниченное нарастание глубины вложенности.

Примечание 4: если вторичный batch-файл не найден ни в текущем каталоге, и ни по одному из путей, объявленных в переменной PATH, то

происходит переход к интерпретации следующей строки первичного batch-файла без какого-либо сообщения об ошибке.

Примечание 5: в строках с командой CALL не допускается наличие знаков перенаправления (2.04-022.04-05).

Примечание 6: не следует путать описанную здесь команду CALL, исполняемую интерпретатором Command.com, с одноименной ассемблерной командой (7.03-08), исполняемой отладчиком Debug.exe.

3.03CD – смена текущего каталога

Для упрощения работы с командной строкой DOS способна принимать команды без спецификации конкретного диска или конкретного пути. Неопределенность разрешается посредством установок по умолчанию, для чего должен быть заранее задан принимаемый по умолчанию (текущий) диск, как показано в разделе 2.04-01, а также принимаемый по умолчанию (текущий) каталог

– 45 –

Глава 3: Команды интерпретатора Command.com

на каждом диске. Назначение конкретного каталога на роль принимаемого по умолчанию (текущего) выполняется с помощью команды CD.

Команда CD (Change Directory = сменить каталог) заменяет текущий каталог на любом логическом диске (но не сам текущий диск!) в соответствии с указанным путем. Например, команда

CD C:\DOS

сменит текущий каталог на \DOS, если текущим диском в данный момент является диск C:. Если же команда CD обращается не к тому диску, который в данный момент является текущим, то тогда указанный путь будет принят во внимание как предварительная установка, которая определит текущий каталог только после того, как текущим диском станет диск, указанный в команде CD.

Путь в команде CD может быть указан в любой из допустимых форм (2.02-01). Последним словом пути обязательно должны быть либо имя целевого каталога, либо комбинация замещающих его знаков обратной косой черты, точки и сдвоенной точки (2.02-03). Комбинации этих знаков позволяют осуществить переход в корневой каталог ( CD \ ), в вышестоящий каталог ( CD .. ), подняться на два уровня вверх по структуре каталогов ( CD ..\.. ) и т.п.

Если вместо пути в команде CD указать только диск, например

CD C:

то будет выведен на экран путь к каталогу, который предустановлен на роль текущего на указанном диске. Если не указывать и диск, то будет выведен путь к текущему каталогу на текущем диске.

Примечание 1: CHDIR – еще одно допустимое имя той же команды CD. Примечание 2: предустановленный командой CD каталог невозможно удалить

командой RD (3.23), причем не только на текущем диске, но и тогда, когда указанный диск не является в данный момент текущим.

Примечание 3: предустановленные пути к текущим каталогам для всех логических дисков DOS хранит в таблице CDS (A.03-3), причем при

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

3.04CHCP – смена кодовой страницы

Кодовая страница это набор знаков для вывода сообщений на экран. Когда в командной строке вслед за командной CHCP (CHange CodePage = сменить кодовую страницу) не указан номер кодовой страницы, эта команда выводит сообщение о том, какая кодовая страница задействована в данный момент.

– 46 –

Глава 3: Команды интерпретатора Command.com

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

драйвер DISPLAY.SYS (5.02-02) должен подготовить буферные области в памяти для размещения не менее чем двух кодовых страниц;

кодовые страницы должны быть загружены в подготовленные буферные области командой MODE.COM CON CP PREP (6.18-03);

должен быть загружен резидентный модуль драйвера NLSFUNC.EXE (5.02-03), выполняющий смену кодовых страниц.

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

Загружать несколько кодовых страниц приходится тогда, когда Вы намерены использовать не менее чем два набора национальных (не-американских!) знаков. Номера национальных кодовых страниц приведены в таблице A.02-2. Если, например, Вы подготовили норвежскую кодовую страницу 865 и русскую кодовую страницу 866, тогда командами CHCP 865 и CHCP 866 можно будет выполнять переключение этих кодовых страниц.

Примечание 1: смену кодовых страниц также можно осуществлять командой

MODE.COM CON CP SEL (6.18-03), для которой не требуется загружать резидентный модуль драйвера NLSFUNC.EXE.

Примечание 2: команда CHCP оперирует с кодовыми страницами, поставляемыми фирмой Microsoft и загружаемыми с помощью драйверов фирмы Microsoft. Другие кодовые страницы, в том числе используемые драйвером KEYRUS.COM (5.02-05), не переключаются командой

CHCP.

Примечание 3: если Вы пользуетесь национальной версией какой-либо нужной для Вас программы (например, файл-менеджера Norton Commander), то следует иметь ввиду, что смена кодовой страницы сделает все не-американские надписи полностью нечитаемыми. Смена кодовой страницы не повлияет только на американские знаки (с номерами 32 – 127), общие для всех кодовых страниц.

3.05CLS – очистка экрана

Команда CLS (CLear Screen = очистить экран) не только стирает все содержимое текущей страницы в буфере видеопамяти, но также восстанавливает принимаемые по умолчанию параметры индикации: сбрасывает установки цвета и обеспечивает воспроизведение белых знаков на черном фоне.

– 47 –

Глава 3: Команды интерпретатора Command.com

3.06COPY – копирование файла

Команда COPY (= копировать) позволяет выполнять копирование одного или нескольких файлов, переименование копии, а также конкатенацию (слияние) нескольких файлов. Вот пример использования команды COPY для копирования одного файла в другой каталог:

COPY /A C:\DOS\MS7\TRIAL.TXT A:\DOS /V /Y

здесь:

/A

необязательный параметр, вызывающий прерывание

 

копирования на первой встреченной метке конца файла ( 1Ah ).

 

По умолчанию при копировании одного файла принимается

 

альтернативный параметр /B, обеспечивающий копирование

 

файла целиком, поскольку байт 1Ah в исполняемых и других

 

бинарных файлах может играть совсем другую роль.

C:\DOS\MS7\

пример пути к копируемому файлу. Другие допустимые

 

формы спецификаций пути показаны в разделах 2.02-01

 

2.02-03. Если путь не указан, поиск файла будет производиться

 

только в текущем каталоге. Пути, указываемые в переменной

 

PATH, команда COPY игнорирует.

TRIAL.TXT

пример имени файла, подлежащего копированию. Имя

 

нужно указывать полностью, с суффиксом, если он имеется.

 

Допускается копировать файлы без атрибутов, а также с

 

атрибутами "A" (подлежащий архивированию) и "R" (только для

 

чтения). Файлы с атрибутами "H" (скрытый) и "S" (системный)

 

командой COPY не копируются.

A:\DOS

пример пути, который будет интерпретирован как путь к

 

каталогу назначения, где должна быть размещена копия, если

 

такой каталог существует. Если же такого каталога нет, то

 

последнее имя ( DOS ) будет интерпретировано как новое

 

назначаемое копии имя, и копия с таким именем будет помещена

 

в корневой каталог диска A:. Если Вы не намерены присваивать

 

копии другое имя, то в качестве каталога назначения нельзя

 

указывать тот, где размещен копируемый файл. Когда файл

 

находится не в текущем каталоге, путь к каталогу назначения

 

можно не указывать: по умолчанию копирование будет

 

производиться в текущий каталог.

/V

необязательный параметр, вызывающий проверку соответствия

 

копии исходному файлу. Проверка замедляет процесс

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

– 48 –

Глава 3: Команды интерпретатора Command.com

производится копирование на дискету, то проверка может оказаться не лишней.

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

может быть предустановлен в переменной окружения

COPYCMD (командой SET COPYCMD= /Y ), и тогда указывать его в командной строке уже не нужно. Такая предустановка

может быть преодолена указанием в командной строке параметра /-Y , если предупреждение о перезаписи необходимо.

Когда параметр /A указан последним в командной строке, его действие оказывается совсем другим: он не препятствует копированию файла целиком, но вызывает добавление метки конца файла (байта 1Ah) к копии, если этой метки не было в конце копируемого файла.

Первый путь, указываемый в команде COPY, всегда интерпретируется как путь к копируемому файлу, а последний путь как путь к каталогу назначения, куда должна быть помещена копия. Указание более чем двух путей считается ошибкой, за исключением копирования с конкатенацией, когда посредством

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

COPY /B T1.DAT + T2.DAT /A + REMARK.TXT C:\DOS

здесь:

/B

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

 

копируемому файлу, распространяет свое действие на

 

последующие копируемые файлы до тех пор, пока не будет

 

встречен альтернативный параметр (в данном случае параметр

 

/A ). Последний распространит свое действие на остальные

 

копируемые файлы. Поскольку конкатенация применяется

 

преимущественно к текстовым файлам, постольку при

 

копировании с конкатенацией по умолчанию принимается

 

параметр /A, т.е. копирование каждого файла осуществляется до

 

первой встреченной в нем метки конца файла.

T1.DAT, T2.DAT, REMARK.TXT

это примеры спецификации трех

 

исходных файлов, копии которых подлежат конкатенации.

 

Поскольку пути к исходным файлам не указаны, предполагается

их наличие в текущем каталоге. Спецификации каждого исходного файла, кроме первого, в командной строке предшествует плюс знак конкатенации.

– 49 –

Глава 3: Команды интерпретатора Command.com

C:\DOS – пример пути, который будет интерпретирован как путь к каталогу назначения, если такой каталог существует, и тогда в этот каталог будет помещен файл, полученный в результате конкатенации, который будет наследовать имя первого из копируемых файлов (T1.DAT). Если же каталог C:\DOS не существует, то последнее имя ( DOS ) будет интерпретировано как новое имя, назначаемое файлу, полученному в результате конкатенации, и файл с таким именем будет записан в корневой каталог диска C:.

Использование масок файлов (2.01-03) вместо имен копируемых файлов в команде COPY допускается, но требует осторожности. Для пояснения рассмотрим следующий пример:

COPY /B T*.DAT C:\DOS\CONCAT.DAT

Команда COPY проверяет последнее слово в спецификации пути назначения (справа от последнего знака обратной косой черты) на предмет того, является ли это слово именем существующего каталога или нет. Если каталог CONCAT.DAT не существует, то копии всех файлов, соответствующих указанной маске, будут объединены (конкатенированы) в общий файл, который будет создан в каталоге C:\DOS и получит имя CONCAT.DAT. Если же каталог CONCAT.DAT существует, то копии всех файлов, соответствующих указанной маске, не будут объединены, а будут поодиночке записаны в этот каталог, сохраняя имена исходных файлов. Последний пример показывает, что одна и та же строка с командой COPY дает возможность получать совершенно разные результаты. Во избежание этого необходимо точно знать, что назначаемое имя копии не совпадает с именем существующего каталога.

При конкатенации копий нескольких файлов назначаемое имя объединенной копии может совпадать с именем первого копируемого файла. Имя любого из прочих копируемых файлов присваивать объединенной копии нельзя, иначе содержимое этого исходного файла будет утрачено до копирования. Если Вы уверены, что назначаемое имя копии не будет интерпретировано неверно и не вызовет конфликта имен, то тогда можно указывать один и тот же путь к исходным файлам и к каталогу назначения, или вовсе не указывать эти пути: по умолчанию копирование будет выполняться в текущий каталог.

Копирование файла "самого в себя" считается ошибкой, но форма копирования с конкатенацией все-таки позволяет указать один и тот же путь как к копируемому файлу, так и к каталогу назначения. При этом спецификации второго (добавляемого) файла вообще можно опустить, например:

COPY /B \DOS\FILE.EXT +,,\DOS

– 50 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]