.BAT : ассемблер и бейсик в комплекте.

Автор: Колянов Алексей aka baldr
Источник:
dospage.by.ru
Прочтений: 1217

 


В этой статье речь пойдет о довольно мощном средстве, позволяющем более полно использовать возможности своей операционной системы. Мы будем говорить о встроенном в DOS языке программирования .bat - файлов. В ходе статьи будут даны интересные примеры по конфигурированию .bat - файлов с целью создания своеобразных макросов для более удобной работы. Также, предполагается рассмотреть список основных команд этого языка и обсудить целесообразность использования их в написании макросов. Описать полностью весь набор вариантов использования этих команд не представляется возможным в одной статье, так что в скором времени может появиться продолжение этой темы. Возможно, мы затронем здесь и описание файла config.sys, который, впрочем, тоже заслуживает отдельной темы.
   .bat- (или batch - "пакетные") файлы представляют собой текстовый файл с набором инструкций командному процессору command.com для автоматической обработки нескольких команд операционной системы. В качестве инструкций могут выступать как имена исполняемых файлов для запуска, так и специальные инструкции: условия, циклы, безусловные переходы...
   С помощью пакетных файлов возможно создание довольно мощных средств для облегчения выполнения трудоемких операций, например, копирования, создания больших архивов, проверки каких-либо внешних условий и условная обработка данных. Особенно широкий простор здесь открывается для тех, кто знает хотя бы один язык программирования - используя и свои программы, можно создавать прямо-таки гигантские программные комплексы.
   Так, например, у автора данной статьи есть несколько пакетных файлов, связанных с мини-программами на ассемблере. Например, анализирущий состояние светодиодов и в зависимости от этого запускающий Windows 98 (да, бывает надо...) или другой пакетный файл для дальнейшей работы под DOS. Или, например, тоже, связанный с программами на ассемблере, которые, анализируя нажатые клавиши, возвращают тот или иной код завершения .bat-файлу, компилирующему и линкующему в зависимости от этого exe- или com-файлы с ассемблера. Если бы их не было, приходилось бы набирать в командной строке около трех-четырех команд, причем, с указанием всех необходимых ключей.
   Однако, пора перейти к более детальному рассмотрению команд и операторов пакетных файлов. Мы не будем здесь, по возможности, рассматривать утилиты, входящие в стандартный или расширенный комплект DOS (это планируется рассмотреть в ближайших новых статьях), однако рассмотрим такие особенности, как перенаправление ввода-вывода и параметры командной строки.
  
   При написании использовались принятые в DOS обозначения:
   <параметр> - параметр, который должен быть обязательно при описанных условиях.
   [параметр] - необязательный параметер, который может быть опущен.
   | - оператор "или.". То есть - один из вариантов.
  
   Все команды и операторы языка являются регистронезависимыми, то есть, команды echo off , ECHO OFF и EcHo oFf являются абсолютно идентичными. Однако, хорошим тоном считается писать все .bat-файлы в верхнем регистре.

Основные команды и операторы пакетных файлов.
/*Примеры пакетных файлов - см. ниже*/


REM [текст]
   Команда
REM служит для придания программе осмысленности и структкурированности путем ввода комментариев. Любой текст, расположенный в строке после нее, будет считаться комментарием и не выполняется. Это бывает полезно при отладке программы или временном "выключении" некоторых строк файла. Иногда эта команда (можно считать REM и оператором) используется для вывода текста на экран при выключенном эхо (echo off). Однако, это уже побочный эффект.

   REM Это комментарий. Данная строка служит пояснением.


ECHO [ON|OFF|Текст]
   Команда
ECHO используется для управления эхо-режимом, то есть режимом отображения на экране служебной информации (текста программы) во время ее выполнения. ECHO OFF запрещает этот вывод, а ECHO ON - разрешает.
   Операнд
ECHO <Текст> используется для вывода текста на устройство (в частности, на экран, COM или LPT-порты...). То есть, команда
   ECHO Привет!
выведет на экран слово
Привет!.
   Пример:

   ECHO ATDP 21435 > COM2
пошлет на устройство на порте COM2 (например, на модем) команду
ATDP 21435, то есть, набор номера 21435. Команда ECHO чаще всего используется для перенаправления вывода в потоки (см. далее). Далее будет рассмотрен пример простейшего набирателя номера (Приложение A).


@<команда>
   Оператор
@. позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки. Часто используется следующим образом в начале многих пакетных файлов:
   @ECHO OFF
   Это позволяет не выводить и саму запрещающую строку
ECHO OFF при выполнении пакетных файлов.


GOTO <метка>
   Оператор
GOTO осуществляет безусловный переход на метку внутри этого же файла. метка обозначается следующим образом:
  :label
то есть, со знаком двоеточия в начале. Итак, объявив:

  GOTO label3
  :label1
  GOTO label2
   ...
  :label3
  GOTO label1
   ...
  :label2
мы заставим при достижения первого оператора перехода передать управление на строку, находящуюся в строке после :label3, затем, после третьего - на :label1 , далее (после второго
GOTO) - на :label2 - и выход.
   Заметим, что оператор двоеточие (
:) может также служить комментарием, так как имя метки несет чисто символическое значение (хотя должно быть уникальным) и может быть произвольным. Однако, это уже отступление от норм, что иногда может быть чревато.
   Ниже будет рассмотрено использование меток для связи с файлом
config.sys при создании загрузочного меню.


%<цифра 0-9>
   Как и в любом языке, в языке пакетных файлов возможно использование переменных. Всего может быть 10 одновременно существующих независимых переменных. Для написания сложных программ это довольно мало, хотя для обычной работы часто хватает и 3-4. Значение переменной равно значению соответствующего параметра из командной строки. Переменная
%0 будет содержать имя .bat-файла и, если вы указали, путь к нему. То есть, если у нас есть командная строка
  abc.bat a bc def
то переменная
%1 будет содержать значение a, %2 будет содержать bc, а %3 - def. Это свойство широко используется для создания универсальных пакетных файлов при работе с повторяющимися операциями.
   Если Вам необходимо более 10 переменных, то возможно использование команды
SHIFT (см. далее).
   Возможно также использование переменных с изменяемым значением (терминология фирмы IBM). (см. SET)
   Если необходимо передать значение, например, из параметра
%1 в %2, то приходится прибегать к некоторым уловкам. Например, можно записать в файле ABC.BAT:
   ABC.BAT %2 %1
Это вызовет прекращение выполнения данного файла и передаст управление ему же, но с параметрами, записанными в обратном порядке. Эта манипуляция часто используется при автоисправлении неправильного порядка параметров, переданных пакетному файлу.


SHIFT
   Команда
SHIFT позволяет использовать число параметров командной строки далее 10. Однако, при этом теряются соответственно более ранние параметры. Иными словами, команда SHIFT сдвигает все значения переменных на один влево. То есть, переменная %0 будет содержать значение, содержавшееся до этого в переменной %1, а переменная %1 - значение переменной %2 до сдвига. Однако, данная операция является необратимой, то есть, невозможно сдвинуть переменные обратно.
   Использование
SHIFT может дать интересный эффект при переборе командной строки в цикле, однако данная статья не ставит себе целью объяснять все возможные алгоритмы, поэтому данный способ предлагается рассмотреть самостоятельно.


CALL <имя bat-файла>
   Команда
CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример:
   @ECHO OFF
   ECHO Этот текст выводится
   CALL ABC.BAT
   ECHO Этот текст тоже выводится
   ABC.BAT
   ECHO А этот уже не выводится.
То есть, при выполнении команды
ABC.BAT выполнение текущего пакетного файла прекратится и управление будет передано пакетному файлу с именем ABC.BAT . То есть, происходит действие, аналогичное вызову подпрограммы в других языках программирования. При использовании команды CALL ABC.BAT, после завершения работы файла ABC.BAT управление будет возвращено на следующую после команды вызова строку. Этим способом можно организовать рекурсию пакетных файлов, однако следует более точно проверять условие прекращения перебора. Это можно сделать с использованием условных операторов (см. IF).
  
Примечание: вызвать подпрограмму с последующим возвратом можно и без использования команды CALL. Выполните команду:
   command.com /c abc.bat
выполнится действие, аналогичное команде
CALL abc.bat . Этот способ выполнения более удобен через командную строку или выполнение пакетных файлов из функции DOS-EXEC (4Bh/int 21h).


IF <условие> <следствие>
   Оператор
IF проверяет истинность какого-либо <условия> и в зависимости от этого выполняет или не выполняет команду <следствие>. Возможны следующие условные конструкции:
  IF EXIST ABC.BAT GOTO work
если существует файл
ABC.BAT, то перейти на метку work.
  IF NOT EXIST ABC.BAT GOTO exit
если не существует файл
ABC.BAT, то перейти на метку exit.
  IF %1==ASDF GOTO asdflabel
если переменная
%1 равна ASDF, то - переход на метку asdflabel.
  IF ERRORLEVEL 1 GOTO err1
если ошибка (возвращаемое значение) выполнения предыдущей команды равно 1, то перейти на метку
err1.
  
Внимание: более подробное рассмотрение работы с ключевым словом ERRORLEVEL будет дано в отдельном разделе ниже из-за некоторых его неочевидных особенностей.


PAUSE
   Команда
PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы. Бывает полезна для того, чтобы дать возможность пользователю прочитать многостраничный текст без использования фильтра MORE. В версиях MS-DOS до 6.22, кажется, была возможность задавать свой собственный текст вместо стандартного, однако, эту информацию так и не удалось проверить.


FOR %<параметр> IN (<VAR1 [VAR2] [VAR3] ...>) DO <команда>
   С помощью оператора
FOR возможно выполнение одной и той же команды несколько раз для различных параметров. Рассмотрим следующий пример для большей ясности:
   FOR %%P IN (file1 file2 file3) DO DEL %%P
  Знак процента используется в операторе
FOR удвоенным для обозначения пустой переменной в пакетном файле. Если оператор FOR используется из командной строки, знак процента должен быть одинарным.
   Итак, что же выполняет данная последовательность? В результате выполнения будут удалены файлы
file1, file2 и file3. Можно записать и с использованием маски файлов:
   FOR %%P IN (file?) DO DEL %%P
В результате будут удалены все файлы, подпадающие под данную маску. Если в последовательности VAR нет символов маски файла, эта последовательность может обозначать любые текстовые строки. Иначе - это должны быть имена файлов на диске.
   Этот оператор чрезвычайно удобен для обработки одинаковых файлов в одном каталоге в пакетном файле. Если не использовать оператор
FOR, нужно будет написать DEL file[N] N раз.
   В качестве команды можно указать и вызов какой-либо подпрограммы (см. CALL).
  
Замечание: В строке цикла FOR нельзя использовать переадресацию и перенаправление потоков (см. далее).


SET <Имяпеременной>=<Значениепеременной>
   Оператор
SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Так, если задано (переменная, которую требуют многие игры, использующие звуковую карту компьютера):
   SET BLASTER=A220 I5 D1 P330
то при использовании в пакетном файле следующей конструкции:

   ECHO %BLASTER%
на экран будет выведено "
A220 I5 D1 P330". Переменные, определенные с помощью оператора SET называются переменными окружения среды (environment) и являются видимыми после выполнения до перезапуска DOS (если не изменять ее вручную в памяти). То есть, ее можно использовать из одного пакетного файла или программы после задания в другом.
   Наиболее известной является переменная
PATH, представляющая собой набор путей для быстрого поиска файлов. Она задается в файле autoexec.bat (см. далее) примерно так:
   PATH=C:\DOS;C:\UTILITES;D:\TASM
Несмотря на то, что
PATH объявляется без использования оператора SET, она является переменной окружения. Добавлять значения к переменной можно следующим образом:
   PATH=%PATH%;D:\PASCAL
Подробнее о
PATH и других средствах DOS - см. в следующих статьях.


PROMPT [текст][спецификатор]
   Команда
PROMPT хоть и не является командой пакетного файла, так как является командой операционной системы в целом, однако, заслуживает упоминания, ибо почти всегда присутствует в файле autoexec.bat (см. далее).
   Данная команда управляет видом приглашения командной строки. Обычно оно выглядит примерно следующим образом:

   C:\DOS>
Этому соответствует спецификатор команды
PROMPT, равный $P$G То есть, Диск:\Путь> . Это задается использованием знака доллара "$" и символа, означающего определенную последовательность. Предусмотрены следующие варианты:
   $ - символ "знак доллара".
   _ - перевод строки
   B - символ "|"
   D - текущая дата
   E - символ #27 (Esc)
   G - символ "больше"
   H - "backspace"-символ
   L - символ "меньше"
   N - текущий диск
   P - текущий каталог на текущем диске
   Q - символ "равно"
   T - текущее время
   V - номер версии DOS
Используя сочетания этих символов можно изменить вид приглашения DOS по своему вкусу. Не забывайте ставить перед каждым из этих символьв знак доллара. Если использовать какой-либо текст в строке команды
PROMPT, он также будет выведен в соответствующие позиции.
  
Замечание: Если Вы используете спецификатор $P и диск (например, A:) не готов, операционная система выведет следующее сообщение при попытке предпринять какое-либо действие с диском:
   Not ready reading drive A
   Abort, Retry, Fail?
Нажмите F для возврата в командную строку.


 

Перенаправление потоков ввода/вывода


   Перенаправление потоков в операционной системе позволяет, например, вывести результат работы программы не на экран, а в файл или на принтер, а также использовать результаты работы одной программы в другой.
   Для перенаправления потоков используются символы "
>", ">>", "<", "<<" и "|".
   Приведем пример. Команда

   DIR *.* >abc.txt
выведет результаты не на экран, а в файл
abc.txt, предварительно создав или перезаписав его. В дальнейшем можно использовать его для более удобной обработки полученной информации (например, если список слишком большой).
   DIR *.* >>abc.txt
данная команда также запишет результат не на экран, а в файл
abc.txt, но она не удалит его содержимое, а добавляет результат в конец файла. Если файл все-таки не существует, он будет создан.
   DIR *.* | MORE
Это пример использования результатов выполнения команды (
piping) DIR фильтром MORE, который делает паузу после каждого экрана листинга. Еще один полезный пример:
   ECHO Y | DEL *.*
Сама команда
DEL *.* должна удалить все файлы в каталоге. Однако, она предусмотрительно запрашивает подтверждение на подобное действие. Для того, чтобы автоматически (например, из пакетного файла) удалять все файлы, мы используем передачу результатов выполнения команды ECHO Y, которая должна вывести символ Y, в команду DEL *.*, которой требуется один символ: Y или N. Похожее действие выполнит команда
   program.exe <file.in
передаст программе
program.exe данные из файла file.in таким образом, как будто они были введены с клавиатуры. Однако, нужно быть осторожным с таким способом передачи, так как программа может в какой-нибудь момент времени запросить совсем другой ввод.
   Также перенаправить вывод можно и в порт, например, в COM1, COM2, LPT и т.д. (см. пример у команды ECHO).

Использование возвращаемых значений


   Любая программа при завершении своей работы возвращает операционной системе код своего завершения. Принято при успешном завершении возвращать ноль, иначе - код ошибки. Иногда, или, вернее, часто, программа "сознательно" возвращает ненулевое значение для того, чтобы в пакетном файле можно было "узнать" некоторые подробности ее работы. Например, программа возвращает код нажатой клавиши, а
.bat-файл по нему выполняет различные действия.
   Каким же образом пакетный файл может узнать код завершения выполненной программы? Для этого предусмотрено ключевая переменная
ERRORLEVEL.
   Пример пакетного файла с
errorlevel'ами:
   @ECHO OFF
   REM Запускаем программу prg1.exe
   PRG1.EXE
   REM Анализ кода завершения
   IF ERRORLEVEL 2 GOTO FILENOTFOUND
   IF ERRORLEVEL 1 GOTO WRITEERROR
   IF ERRORLEVEL 0 GOTO EXITOK
   GOTO ONEXIT
   :FILENOTFOUND
   ECHO Ошибка! Файл не найден!
   GOTO ONEXIT
   :WRITEERROR
   ECHO Ошибка записи!
   GOTO ONEXIT
   :EXITOK
   ECHO Программа завершена благополучно.
   GOTO ONEXIT
   :ONEXIT
Обратите внимание - анализ кода завершения начинается не с нуля, а с максимально возможного значения. Дело в том, что подобная проверка означает: "если
errorlevel больше или равен значению, то...". То есть, если мы будем проверять, начиная с нуля, любое значение будет истинным на первой же строке, что неверно. Это самая распространенная ошибка в подобного рода программах. В приложении B есть пример .bat-файла, который в зависимости от горящих на момент его запуска индикаторов клавиатуры запускает ту или иную программу.
  
Замечание: Между вызовом программы, возвращающей код завершения и обработчиком этого кода должно быть как можно меньше операторов и не должно быть ни одной команды, иначе это повлияет на код!
   Передача параметров запускаемой программе и возврат значений из нее позволяет организовать двустороннюю связь между вызывающей и вызываемой программой. Это один из основополагающих принципов операционной системы.


 

Файл autoexec.bat


   Мы уже несколько раз упоминали такое имя пакетного файла, как
autoexec.bat, однако, ни разу не объяснили, что же это за файл. Настала пора разобраться с этим поподробнее, тем более, что средний пользователь из всех пакетных файлов чаще всего работает именно с ним.
   Файл
autoexec.bat, или файл начальной загрузки, выполняется при каждом запуске DOS. В этом файле записан вызов всех тех программ, которые должны запуститься перед тем, как пользователь начнет свою работу с системой. Например, там может стоять вызов русификатора, драйвера мыши и Norton Commander. Находиться этот файл должен в корневом каталоге загрузочного диска. Если он не найден, система при запуске попросит подтвердить правильность системной даты и времени. Выглядит этот файл как любой пакетный файл и строится по тем же самым принципам, так что сложных особенностей у него нет.
   Вот пример обычного файла
autoexec.bat от системы MS-DOS 6.22:
   @ECHO OFF
   PROMPT $P$G
   PATH=C:\DOS;C:\UTILITES;D:\TASM;
   SET BLASTER=A220 I5 D1 P330
   KEYRUS.COM
   MOUSE.EXE
   C:\NC\NC.EXE
Не правда ли - все уже знакомо?

Использование меток и файла config.sys при создании загрузочного меню


   Иногда бывает необходимо запускать систему в разных конфигурациях, в зависимости от выбора пользователя. В таком случае, необходимо выдать на экран меню, в котором пользователь может сам выбрать тот способ загрузки, который больше всего ему подходит. Для того, чтобы организовать это на достаточно ранней стадии загрузки системы, то есть, до запуска основной части драйверов, необходимо сделать это на уровне еще одного системного файла - файла
config.sys.
   Вообще, рассмотрение этого файла - довольно большой объем материала, так что ограничимся только основными понятиями.
   Итак, файл
config.sys содержит объявления тех драйверов системы, которые должны быть загружены при запуске системы. Отличие его от файла autoexec.bat в том, что autoexec.bat содержит вызов программ, а config.sys - драйверов, которые должны загружаться раньше программ. Находиться он должен тоже в корневом каталоге загрузочного диска.
   Приведем пример стандартного файла
config.sys пока без загрузочного меню. Комментарии здесь также ставятся оператором REM.
   REM Файл config.sys без использования меню
   REM Загрузка драйверов верхней памяти
   DEVICE=C:\DOS\HIMEM.SYS
   DEVICE=C:\DOS\EMM386.EXE RAM
   REM Настройка параметров DOS
   BUFFERS=20,0
   FILES=30
   DOS=UMB
   LASTDRIVE=Z
   FCBS=4,0
   DOS=HIGH
   А теперь, для сравнения, пример файла с использованием загрузочного меню. Всего будет три пункта меню, второй пункт меню - будет по умолчанию ждать реакции пользователя 15 секунд, а затем загружаться автоматически.

   REM Файл config.sys с использованием меню
   REM Загрузка драйверов верхней памяти
   DEVICE=C:\DOS\HIMEM.SYS
   DEVICE=C:\DOS\EMM386.EXE RAM
   REM Настройка параметров DOS
   BUFFERS=20,0
   FILES=30
   DOS=UMB
   LASTDRIVE=Z
   FCBS=4,0
   DOS=HIGH
   REM А теперь - меню
   [MENU]
   MENUITEM=FULL_DRIVERS_DOS
   MENUITEM=STANDARD_DOS
   MENUITEM=TINY_DOS
   MENUDEFAULT=STANDARD_DOS, 15
  
   REM Это была декларация, а теперь - описание:
   [FULL_DRIVERS_DOS]
   REM Полная загрузка DOS со всеми драйверами
   DEVICE=C:\DOS\SETVER.EXE
   DEVICE=C:\DRVS\TSYCDROM.SYS /D:TSYCD1
   DEVICE=C:\ESSUTIL\ES1868.COM /A:0 /I:0
   DEVICE=C:\RAMDRIVE.SYS 3000/E
  
   [STANDARD_DOS]
   REM Стандартная загрузка DOS
   DEVICE=C:\DRVS\TSYCDROM.SYS /D:TSYCD1
   DEVICE=C:\ESSUTIL\ES1868.COM /A:0 /I:0
  
   [TINY_DOS]
   REM Загрузка в режиме без драйверов
  
   [COMMON]
   REM Блок, общий для всех конфигураций
   INSTALL=C:\DOS\SHARE.EXE
Теперь, при запуске системы на экране появится меню из трех пунктов с возможностью выбора одного из них. Однако, можно сделать загрузку еще функциональнее, если интегрировать файл
config.sys с файлом начальной загрузки autoexec.bat. Для этого необходимо каким-то образом проанализировать выбранный пользователем вариант загрузки. Для этого служит определяемая автоматически переменная окружения %CONFIG%, на которую необходимо... передать управление из autoexec.bat. Она содержит имя выбранного варианта загрузки. Приведем пример файла autoexec.bat с использованием вышеописанного файла config.sys.
   @ECHO OFF
   REM Здесь пока все обычно
   PROMPT $P$G
   PATH=C:\DOS;C:\UTILITES;D:\TASM;
   REM А теперь - проверка на меню
   GOTO %CONFIG%
  
   :FULL_DRIVERS_DOS
   REM Полная загрузка DOS со всеми драйверами
   SET BLASTER=A220 I5 D1 P330
   C:\ESSUTIL\ESSCFG.EXE /A:220 /I:5 /D:1 /B:330 /J:D
   C:\ESSUTIL\SETVOL /XV:FF /XL:99 /XW:FF /XM:00 /XC:EE /XS:FF /XA:CC
   LH C:\DOS\MSCDEX.EXE /D:TSYCD1
   LH KEYRUS.COM
   LH MOUSE.EXE
   C:\NC\NC.EXE
   GOTO EXITER
  
   :STANDARD_DOS
   REM Стандартная загрузка DOS
   LH C:\DOS\MSCDEX.EXE /D:TSYCD1
   LH KEYRUS.COM
   LH MOUSE.EXE
   C:\NC\NC.EXE
   GOTO EXITER
  
   :TINY_DOS
   REM Загрузка в режиме без драйверов
   GOTO EXITER
  
   :EXITER
Здесь, кажется, все понятно... В переменной
%CONFIG% на момент запуска autoexec.bat содержится имя выбранного варианта, а затем передается управление на эту метку.

Создание текстового файла без помощи текстового редактора.


   Часто бывает необходимо не имея ни одного текстового редактора набрать какой-нибудь текстовый файл, например, создать тот же
autoexec.bat. Здесь на помощь придет следующая возможность DOS. Наберите:
   copy con autoexec.bat
и далее построчно набирайте текст файла. В конце нажмите <Ctrl-Z>. Все! Файл готов. Это объясняется тем, что мы использовали стандартный файл ввода-вывода
con. А если набрать
   copy autoexec.bat con
на экран выведется содержимое нашего файла. Правда, выводить на экран лучше с помощью команды
TYPE. Однако, это уже материал следующей статьи.


 

Фильтры


   Вы можете перенаправлять потоки, используя
фильтры. Фильтры пропускают только часть получаемой информации, соответствующей запросу. В DOS самые используемые фильтры - это FIND, MORE и SORT.
  
Замечание: Учтите, что все фильтры, а также перенаправление потоков может работать только в том случае, если программа, вывод которой фильтруется, выводит текст на экран через стандартные средства DOS. Если же используются другие способы (например, прямое отображение в видеопамять), то все эти возможности не смогут перехватить вывод.

FIND [/V] [/C] [/N] [/I] "строка" [[диск:][путь]имя_файла[ ...]]
   Поиск текстовой строки в одном или нескольких файлах.
   Параметры:
   /V - Вывод всех строк, НЕ содержащих заданную строку.
   /C - Вывод только общего числа строк, содержащих заданную строку.
   /N - Снабжение отображаемых строк номерами.
   /I - Поиск без учета регистра символов.
   "строка" - Искомая текстовая строка.
   [диск:][путь]имя_файла - Файл либо файлы, в которых производится поиск.
Если путь не задан,
FIND производит поиск в тексте, введенном с клавиатуры, либо переданном по конвейеру другой командой. Пример:
   DIR A: | FIND /V "компьютер"
Выведет имена всех файлов, не содержащих слово "
компьютер".
  
Замечание: Вы можете использовать параметр /V вместе с /C ИЛИ /N, но /N не будет работать с /C.


MORE [диск:][путь]имя_файла MORE < [диск:][путь]имя_файла имя_команды | MORE [диск:][путь][имя_файла]
  Последовательный вывод данных по частям размером в один экран.
  Параметры:
   [диск:][путь]имя_файла - Задает файлы, отображаемые по фрагментам
   имя_команды - Команда, вывод которой отображается на экране.
  Пример:

   DIR | MORE
Выведет список файлов постранично.
  
Примечание: Для выхода из режима просмотра используйте сочетание клавиш <Ctrl-Break>, а для просмотра - любую клавишу.


SORT [/R] [/+n] [[диск1:][путь1]имя_файла1] [> [диск2:][путь2]имя_файла2] [команда |] SORT [/R] [/+n] [> [диск2:][путь2]имя_файла2]
  Сортировка ввода с выводом результатов в файл, на экран или другое устройство
  Параметры:
   /R - Изменение порядка сортировки на обратный, от Z к A и затем от 9 до 0.
   /+n - Сортировка файла по символам в столбце n.
   [диск1:][путь1]имя_файла1 - Сортируемые файлы
   [диск2:][путь2]имя_файла2 - Файл, в который направляется сортированный ввод.
   команда - Команда, вывод которой следует отсортировать.
  Пример:

   SORT /R < BOOK1 > REV
Сортирует файл
BOOK1 в обратном порядке и записывает результат в файл REV. Примечание: Буквы нижнего регистра соответствуют буквам верхнего (a=A, z=Z).


 

Заключение


   Если Вы внимательно дочитали до этого места, то можете смело прибавлять к тем языкам программирования, которые Вы уже знаете, язык программирования
.bat-файлов. И пускай многие считают, что ничего серьезного из этого сделать нельзя, Вы должны помнить, что известная в свое время вирмейкерская группа Stealth (выпускавшая электронный журнал о вирусах Infected Voice) опубликовала исходный текст полиморфного вируса, написанного целиком на .bat-языке. Теперь и Вы, немного попрактиковавшись, сможете писать довольно интересные и полезные макроконструкции. В дальнейшем коллекция исходных текстов на этой страничке может пополниться. Присылайте и свои исходники.


 

Приложение A: простейший номеронабиратель


  @ECHO OFF
  ECHO AT ZL0M0 > COM2
  ECHO ATDP %1 > COM2
  ECHO ...
  
ECHO Возьми телефонную трубку и нажми ввод...
  PAUSE
  ECHO AT > COM2
  PAUSE
  ECHO ATH > COM2
  
Примечание: Здесь используются стандартные команды hayes-совместимого модема, причем считается, что модем подсоединен к порту COM2.

Приложение B: запуск программ по коду завершения


   Здесь приводится пример реальной программы. Это файл chklock.bat, который анализирует код возврата программки на ассемблере, которая, в свою очередь, проверяет значения индикаторов NumLock, CapsLock и ScrollLock. Возвращает она число, в двоичном представлении которое отображает состояние этих индикаторов. То есть, если возвращается 5 (двоичное 101), то горят N/Lock и S/Lock.

   @ECHO OFF
   NSLOCKS.COM
   IF ERRORLEVEL 5 GOTO EXITER
   IF ERRORLEVEL 4 GOTO RUN_WINDOWS
   IF ERRORLEVEL 3 GOTO EXITER
   IF ERRORLEVEL 2 GOTO NODNSM
   GOTO RUN_DNSM
   GOTO EXITER
   :RUN_WINDOWS
   ECHO Windows starting...
   WIN
   GOTO EXITER
   :RUN_DNSM
   ECHO DOS continues loading...
   REM
Вызов пакетного файла без возврата
   DNSM.BAT
   GOTO EXITER
   :NODNSM
   ECHO DOS continues loading without advanced drivers...
  
GOTO EXITER
   :EXITER
Проверка на 5 и 3 нужна для исключения ситуации, когда горят одновременно 2 индикатора.
Для того, чтобы использовать этот файл, (ТОЛЬКО ЕСЛИ У ВАС WINDOWS 95/98!), Вы должны удостовериться, что в вашем файле
msdos.sys (в корневом каталоге загрузочного диска) есть следующая строчка:
  BootGUI=0
Если ее нет - подправьте файл так, чтобы она появилась. Также, файл
autoexec.bat в конце должен содержать вызов этого файла:
  chklock.bat

Приложение C: установка переменных окружения,
соответствующих логическим дискам


   Наверное, каждый продвинутый пользователь сталкивался с "проблемой второго винчестера", когда подсоединенный второй (третий...) жесткий диск нарушал Вашу гармонию в расположении дисков, нагло вторгаясь между логическими дисками
C: и D:. Мне это в конце концов надоело и я написал программку с использованием .bat-файла и ассемблерной программки. .bat-файл вызывает ассемблерную программу, которая анализирует диск, имя которого передано ей в командной строке, на соответствие заданной метке диска. Возвращает 0, 1, 2 или 3 (у меня три основных логических диска). Соответственно, устанавливаются переменные окружения.
   Для дальнейшего использования (например, в
Dos Navigator) можно задать в настройках, например, такой путь в Запуск по расширению:
  
cpp {%DDISK%\bc\bin\bc.exe !.!}
И так далее... Однако, такие пути подходят только для работы с командной строкой, то есть там, где их может понять
КОМАНДНЫЙ ПРОЦЕССОР. То есть, если Вы укажете, например, в Turbo Pascal такой путь, то он Вас не поймет... Такие пути интерпретируются самой операционной системой, да и то не везде.
Здесь сама программа. Кто знает - разберется.

Сайт управляется системой uCoz