Команды для командных файлов

8.8.16. Команды для командных файлов

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

Особенности организации командных файлов в NDOS перечислены при описании Команды ALIAS (см. п. 8.8.11). Аппарат командных файлов, поддерживаемый NDOS, таков, что язык командных файлов является по сути полноценным языком программирования и включает даже средства ввода-вывода.

 

Команда ECHO

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

Синтаксис:

ECHO [ON|OFF |сообщение]

Комментарии. Особенности NDOS-команды ECHO связаны в большей степени с расширением командного языка этого КП, а не с усовершенствованием данной команды как таковой.

В командных файлах по умолчанию принимается ECHO ON. Однако если Вы измените командой SETDOS значение системной переменной VERBOSE с 1 на 0, то умолчание для командных файлов будет заменено на ECHO OFF. Установленный (по умолчанию или явно) статус эхо-ото­бражения наследуется всеми вызываемыми (подчиненными) командными файлами.

При вводе команд с клавиатуры всегда по умолчанию принимается ECHO OFF, причем этот статус эхо-отображения никоим образом не зависит от статуса, установленного в командных файлах (и наоборот). Ввод команды с клавиатуры при отключенном эхо-отображении приводит к синхронной выдаче на экран напечатанных символов. После нажатия клавиши Enter командная строка передается на выполнение. При включении эхо-отображения (ECHO ON) дополнительно к этому NDOS будет выдавать на экран командную строку с разименованными синонимами и подставленными значениями глобальных переменных, что весьма полезно при отладке сложных команд.

NDOS обеспечивает эмуляцию символа Esc парой других символов, а именно, t (Ctrl-X) и е. Поэтому команду ECHO теперь удобно использовать для выдачи Escape-последовательностей на устройство CON.

Замечания:

— при необходимости поместить в текст сообщения символы |, > и/ или < заключайте их в кавычки или предотвращайте их нормальную интерпретацию предшествующим символом ↑ (Ctrl-X);

― символ ↑ (Ctrl-X) можно заменить другим, если выполнить команду SETDOS с переключателем /E.

Пример:

     ECHOe[7;12H – выдать Escape-последовательность.

 

Команда TEXT

Назначение: отображение фрагмента текста.

Синтаксис:

TEXT

строки текста

 ENDTEXT

Комментарии. В отличие от команды ECHO данная команда позволяет отобразить несколько строк текста одновременно, что удобно, например, при выводе меню.

Замечания:

― ключевые слова TEXT и ENDTEXT должны располагаться на отдельных строках, в которых не допускается наличие других символов;

― если к системе подключен драйвер ANSI.SYS, то в отображаемый текст можно поместить Escape-последовательность для смены атрибутов экрана.

Пример:

         @ЕСНО OFF^CLS^SCREEN 2 О

TEXT

Введите одну из следующих цифр:

1 ― СУБД Paradox

2 — редактор ЛЕКСИКОН

3 — утилиты Нортона

Сделайте Ваш выбор:

ENDTEXT

 

Команда PAUSE

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

Синтаксис:

PAUSE [сообщение]

Комментарии. В отличие от одноименной DOS-команды данная команда отображает текст

Strike a key when ready...

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

Если команда PAUSE выдана из определения синонима и пользователь ответил нажатием комбинации клавиш Ctrl-Break, то интерпретация синонима в отличие от командного файла немедленно прекратится без повторного запроса.

 

Команда CANCEL

Назначение: прекращение обработки командных файлов.

Синтаксис:

CANCEL

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

Пример:

         IF "%TERM" = = "END" CANCEL

 

Команда QUIT

Назначение: завершение выполнения текущего командного файла.

Синтаксис:

QUIT

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

Пример:

         IF "%TERM" = = "RETURN" QUIT

 

 

Команда IF

Назначение: организация разветвлений в командных файлах и синонимах.

Синтаксис:

IF [NOT] условие process

Комментарии. Усовершенствования данной команды заключаются в предоставлении более богатого набора условий. В условии можно использовать следующие логические операции (обоз­начим их через ор):

EQ (или = =)             — равно;

NE                              — не равно;

LT                               — меньше;

LE                              — меньше либо равно;

GT                              — больше;

GE                              — больше либо равно.

Условие может принимать одну из следующих форм:

EXIST pattern                       — существует по крайней мере один файл, сопоставимый с шаблоном pattern;

ISDIR dir                               — существует по крайней мере один каталог, сопоставимый с шаблоном dir,

ISALIAS string                     — имя string является синонимом;

stringl op string2                    — значение логического выражения истинно. Перед вычислением этого логи­ческого выражения в операндах stringl и string2 параметры замещаются аргументами, ссылки на значения глобальных переменных — их значениями, а вызовы встроенных функций — результатами их вычисления. Различия между одноименными прописными и строчными буквами игнорируются;

ERRORLEVEL [op] п         — последняя выполненная программа, в частности, внешняя команда, выдала код возврата т, такой, что значение логического выражения т op п истинно. Если операция ор не задана, то подразумевается GE (как в DOS).

Если значения строк stringl и string2 содержат только цифры, то NDOS, в отличие от COMMAND.COM'a, использует числовое сравнение, а иначе — символьное (лексикографическое). Так, условие 09 = = 9 удовлетворяется.

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

Пример:

    IF %@DOSFREE[K] GE 350 ECHO Свободно не менее 350 Кбайт — проверить, имеется ли в ОЗУ свободная область размером не менее 350 Кбайт.

 

Команда IFF

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

Синтаксис:

IFF [NOT] условие THEN

Process

[ELSEIFF [NOT] условие THEN

process

...]

[ELSE process

...]

ENDIFF

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

Формат команды IFF представлен на нескольких строках не случайно — каждая конкретная команда IFF должна иметь в точности такую же структуру. Конечно, конструкции команды можно размещать и на одной строке, используя для их сцепления символ Л.

Конструкций ELSEIFFTHEN может быть несколько или ни одной.

Семантика команды IFF такова:

1) вычисляется очередное (начиная с первого) логическое выражение [NOT] условие;

2) если оно истинно, то интерпретируется фрагмент командного файла (синонима), распо­ложенный между строкой с истинным логическим выражением и следующей конструкцией ELSEIFFTHEN, ELSE или END IFF, после чего выполнение команды IFF прекращается;

3) если значением вычисленного логического выражения является «ложь», то в качестве очередного логического выражения выбирается [NOT] условие в следующей конструкции ELSEIFF, и осуществляется переход к п. 1. Когда такой конструкции не обнаружено и имеется конструкция ELSE, то выполняется фрагмент командного файла (синонима), указанный за ней, после чего интерпретация команды IFF прекращается. Если отсутствует и конструкция ELSE, то в этом случае просто прекращается выполнение команды IFF.

Условия в команде IFF могут задаваться в том же виде, что и в команде IF. Средства, аналогичные команде IFF, имеются во всех развитых языках программирования. Конструкцию IFFTHENELSEIFFTHEN... — ELSEENDIFF можно прочитать как «ес­ли—то — иначе если — то ... — иначе — все», что облегчит уяснение семантики команды IFF.

Замечания:

        команды IFF могут быть, вложенными, но глубина вложенности не должна превышать 15;

        использование команды GOTO внутри команды IFF допустимо, но запрещается переходить к другой конструкции данной команды;

        переход на метку внутри команды IFF также запрещен.

Пример:

         IFF "%TERM" = = "END" THEN*CANCEL

ELSEIFF "%TERM"= = "RETURN" THEN'QUIT

ELSE'ECHO Продолжение работы

ENDIFF

 

Команда FOR

Назначение: организация цикла в командном файле или синониме.

Синтаксис:

FOR %[%] параметр IN (список) [DO] process

Комментарии. Команда FOR отличается от одноименной DOS-команды следующим:

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

2)перед параметром цикла могут указываться символ ~% или пара таких символов (%%), независимо от того, где команда FOR использована (в командном файле, определении синонима или в ответ на приглашение NDOS);

3) длина параметра цикла ограничивается 80 символами (а не единственным символом);

4) ключевое слово DO не является обязательным;

5)команды FOR могут быть вложенными (в DOS такое вложение не допускается).
Пример:

         FORIN (*.ВАК) IF EXIST %@NAME[%A].TXT DEL %A - удалить ВАК-версии существующих ТХТ-файлов.

 

Команда SHIFT

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

Синтаксис:

SHIFT [n]

Комментарии. Числом п задается направление и величина сдвига.

Если n>0, то параметры сдвигаются относительно аргументов на п позиций вправо.

Если n<0, то параметры сдвигаются относительно аргументов на |n| позиций влево.

По умолчанию п считается равным 1 (как в DOS).

Замечания:

― после сдвига изменяются также значения параметров %п& и глобальной переменной #;

― команду SHIFT в определении синонима использовать нельзя.

 

Команда G0SUB

Назначение: вызов подпрограммы в командном файле.

Синтаксис:

GOSUB метка

Комментарии. Данная команда обеспечивает безусловную передачу управления на заданный меткой фрагмент этого же командного файла, после интерпретации которого управление может быть возвращено на команду, непосредственно следующую за GOSUB. Для возврата управления служит команда RETURN.

Подпрограмма может находиться в конце командного файла, вслед за командой QUIT:

GOSUB метка

QUIT

: метка

RETURN

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

 

Команда RETURN

Назначение: возврат из подпрограммы в командном файле.

Синтаксис:

RETURN

 

Команда BE

Команда BE выполняет большинство функций утилиты Batch Enhancer, существенно увеличивая при этом скорость интерпретации командных файлов и синонимов, а также предоставляет дополнительные возможности.

Тем не менее команда BE не поддерживает сценарии и поэтому не воспринимает подкоманды (при описании утилиты они назывались командами) EXIT, GOTO и JUMP.

Дополнительные возможности предоставляются командой BE только в подкомандах PRINTCHAR и REBOOT.

Формат команды BE совпадает с форматом запуска утилиты BE, а справки по требуемой подкоманде можно получить путем ввода командной строки

BE подкоманда /?

После получения командной строки с вызовом BE КП NDOS пытается сначала выполнить внутреннюю команду и только, если это не получается, запрашивает выполнение утилиты BE, которая должна быть, доступна по значению глобальной переменной PATH.

Подкоманда PRINTCHAR вызывается в формате

BE PRINTCHAR k,n [color]

Ее особенности состоят в использовании запятой, а также в том, что максимальное значение н составляет 132 (утилита BE поддерживает только 80). Подкоманда REBOOT запрашивается в виде

BE REBOOT [/V] [/С]

Новый переключатель /С здесь требует произвести не «теплую», а «холодную» перезагрузку DOS.

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

 

Команда ВЕЕР

Назначение: выдача звуковых сигналов.

Синтаксис:

ВЕЕР [т n] ...

Комментарии. Числом т в командной строке должна быть частота сигнала в герцах, а числом n — длительность сигнала в тиках. По умолчанию используется пара 440 2.

Замечания:

― задав частоту меньше 20 Гц, командой ВЕЕР можно обеспечить паузу,

― в командной строке допустимо несколько пар т п.

 

Команда DELAY

Назначение: обеспечение паузы в обработке на определенное время.

Синтаксис:

DELAY [n]

Комментарии. Величина задержки л задается в секундах (по умолчанию принимается 1). Аннулировать задержку можно путем нажатия комбинации клавиш Ctrl-Break.

 

Команда COLOR

Назначение: установка цветов экрана.

Синтаксис:

COLOR [color]

Комментарии. Новые установки будут действовать на весь последующий вывод (но не на те сведения, которые уже отображены на экране). По умолчанию принимается WHI ON BLA, что удобно использовать для возврата атрибутов экрана в исходное состояние.

 

Команда SCREEN

Назначение: позиционирование курсора в заданном месте экрана и вывод сообщения.

Синтаксис:

SCREEN row col [сообщение]

Комментарии. Здесь rowномер строки, a col — номер позиции в строке, где требуется отобразить сообщение. Если сообщение не задано, то просто осуществляется позиционирование курсора.

 

Команда SCRPUT

Назначение: вывод сообщения в заданном месте экрана и с заданными атрибутами.

Синтаксис:

SCRPUT row col color сообщение

Комментарии. Здесь rowномер строки, a col — номер позиции в строке, где требуется отобразить сообщение с атрибутами color.

 

Команда DRAWHLINE

Назначение: вывод на экран горизонтальной линии.

Синтаксис:

DRAWHLINE row col l st color

Комментарии. Аргументы интерпретируются следующим образом:

row                 номер строки, в которой требуется вывести линию;

соl                   номер позиции в строке, начиная с которой следует вывести линию;

l                       длина линии в символах;

st                     — стиль линии (1 — одинарная, а 2 — двойная линия);

color               атрибуты (в том числе цвет) линии.

 

Команда DRAWVLINE

Назначение: вывод на экран вертикальной линии.

Синтаксис:

DRAWVLINE row col l st color

Комментарии. Аргументы имеют смысл, аналогичный команде DRAWHLINE.

 

Команда DRAWBOX

Назначение: вывод на экран прямоугольной рамки.

Синтаксис:

DRAWBOX top left bottom right st color [FILL bgf]

Комментарий. DRAWBOX — это мощная команда, распознающая уже имеющиеся на экране линии и корректно модифицирующая места пересечений с ними отображаемой рамки. Аргументы в командной строке имеют следующий смысл:

top и left                     номер строки и позиции в ней, где нужно разместить левый верхний угол рамки;

bottom и right             номер строки и позиции в ней, где следует разместить правый нижний угол рамки;

st                                 — стиль рамки:

0         — отсутствие явно нарисованной рамки, которая в этом случае отображается полосками фонового цвета;

1         — рамка выводится одинарной линией;

2         — рамка выводится двойной линией;

3         — рамка выводится одинарными горизонтальными и двойными вертикальными линиями;

4         — рамка выводится двойными горизонтальными и одинарными вертикальными линиями;

color                           — атрибуты том числе цвет) рамки;

bgf                               — наименование цвета, которым следует заполнить фон области внутри рамки (если заполнитель не задан, то фон области внутри рамки и ее содержимое не изменяются).

 

Команда INKEY

Назначение: ввод односимвольного значения в командном файле или синониме.

Синтаксис:

INKEY [/Ww] [сообщение] %%string

Комментарии. Данная команда, выданная в командном файле или синониме, обеспечивает ввод с клавиатуры односимвольного значения и его присваивание глобальной переменной с именем string. Если задан аргумент сообщение, то перед нажатием клавиши (или их комбинации) на экране будет отображено указанное приглашение. Завершать ввод символа нажатием клавиши Enter не требуется.

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

Введенное ASCII-значение запоминается как символ. Расширенный же код клавиши представ­ляется строкой, в качестве первого символа которой используется символ @, а последующих — код в десятичной системе счисления (например, нажатие Р1 приведет к вводу строки @59).

Замечание: завершить интервал ожидания можно путем нажатия комбинации клавиш Ctrl-Break.

 

Команда INPUT

Назначение: ввод строки в командном файле или синониме.

Синтаксис:

INPUT [/Ww] [сообщение] %%string

Комментарии. Эта команда аналогична команде INKEY, но имеет следующие особенности:

1) можно ввести последовательность символов (строку);

2) ввод строки следует завершить нажатием клавиши Enter;

3) ввод расширенных кодов клавиш не поддерживается.

 

Команда LOADBTM

Назначение: переключение режима интерпретации командного файла (с ВАТ-режима на ВТМ-режим и обратно), а также отображение текущего режима.

Синтаксис:

LOADBTM [ON | OFF]

Комментарии. NDOS поддерживает два режима выполнения командных файлов — ВАТ-режим и ВТМ-режим.

ВАТ-режим идентичен единственному режиму обработки командных файлов в DOS, когда командный файл читается построчно.

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

Если командный файл имеет расширение ВАТ, то он запускается в ВАТ-режиме, а если ВТМ — то в ВТМ-режиме.

Команда LOADBTM позволяет переключать режим обработки внутри командного файла. Если задать ON, то включится режим ВТМ, a OFF — режим ВАТ. Ввод команды без аргумента обеспечит отображение текущего режима (ON или OFF для ВТМ и ВАТ соответственно).

Команда LOADBTM используется для оптимизации командных файлов по времени выполнения без нанесения ущерба их возможностям, переключая режим на ВАТ только там, где это необходимо, а затем вновь устанавливая режим ВТМ.

 

Команда SETLOCAL

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

Синтаксис:

SETLOCAL

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

Замечания:

― команды SETLOCAL и ENDLOCAL в определениях синонимов недопустимы;

― команды SETLOCAL не могут быть вложенными в пределах одного командного файла (за SETLOCAL должна быть выдана команда ENDLOCAL, и только после этого можно снова mиспользовать команду SETLOCAL). Тем не менее стек все же можно организовать, вызывая SETLOCAL каждый раз в отдельном командном файле.

 

Команда ENDLOCAL

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

Синтаксис:

ENDLOCAL

Комментарии. ENDLOCAL является обратной по отношению к команде SETLOCAL.

 

Команда KEYSTACK

Назначение: запись последовательности символов в буфер клавиатуры.

Синтаксис:

KEYSTACK {"string"|m|@n|!} ...

Комментарии. Команда доступна, если к системе подключен драйвер KEYSTACK.SYS. Эта команда записывает в буфер клавиатуры и выстраивает в очередь к нему последовательность символов, длина которых может достигать 255 символов. Именно эта последовательность символов будет подаваться в запущенную после выдачи команды программу, в частности, имитируя нажатие клавиш. Поэтому команда KEYSTACK позволяет «запрограммировать» макрокоманды, выполня­емые после запуска любого программного продукта, даже если он не имеет макросредств. В частности, можно обеспечить демонстрационное выполнение программы.

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

"string"                       — последовательность символов, составляющих string;

т                                ASCII-символ с десятичным кодом т;

@п                              — расширенный код клавиши (где п — число в десятичной системе счисления).

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

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

Замечания:

― скорее всего, Вам придется поэкспериментировать с программой и командой KEYSTACK, чтобы определить требуемую последовательность символов;

― вводить команду KEYSTACK в ответ на приглашение NDOS бессмысленно, так как все запросы на выполнение команд и программ в данном случае проходят через буфер клавиатуры.

Пример:

    KEYSTACK 0 @68 'лрзMYVOC.VOC 13" - запустить текстовый редактор ЛЕКСИКОН с автоматической загрузкой в него рабочего словаря.