MS-DOS
PKWORLD - Компьютер во всех своих проявлениях.

Главная Вверх Обои Смешное Ссылки Обо мне

 

 

DOS — долгожитель среди операционных систем. Часть 2

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

Итак, BAT-файлы — это текстовые файлы, состоящие из команд ДОС, интерпретируемых при запуске. Во многом BAT'ы похожи на программы.
Кроме команд pause, echo и пр., описанных в предыдущей части, есть и ряд других инструкций, которые могут быть полезны при создании пакетного файла .BAT. Причем эти инструкции, по сути, командами не являются, они выполняют функции операторов в языках программирования.
Одна из них — IF — классический оператор, в том или ином виде присутствующий практически в любом языке программирования. Позволяет проверять правильность условия, заданного пользователем. Например, строка if exist readme.txt echo There is a readme.txt file in the current directory выдаст сообщение "There is a readme.txt file in the current directory" в случае, если в текущей папке есть файл readme.txt. Эту команду можно условно разделить на три части: вызов команды (слово "IF"), условие для проверки (в данном случае — строка exist readme.txt, проверяющая наличие файла readme.txt в текущей папке) и команда, выполняемая, если условие соблюдено (здесь это — echo There is a readme.txt file in the current directory). В данном примере можно изменить имя файла и команду, и он будет работать.

Большинство программ при закрытии оставляют после себя какое-либо значение, называемое возвращаемым, которое указывает на результат работы приложения. Скажем, если какая-либо софтина вырубилась с возвращаемым значением -1, то, скорее всего, имел место глюк или сбой. Инструкция if errorlevel 1 echo Errorlevel 1 напишет "Errorlevel 1", если последняя запущенная программа возвратила значение 1. Также при помощи IF можно сравнивать числа и строки (при сравнении используется двойной знак "равно", т.е. "=="). Кстати, сравнивать можно и параметры, с которыми был запущен командный файл: первый параметр (до первого пробела) обозначается знаком %1, второй — %2 и т.д. Например:

echo off
if %1== hello echo Hello!

Командный файл, запущенный с параметром hello, ответит аналогичной любезностью, т.е. поздоровается. Первая строка — echo off — отключает вывод на экран текущей строки кода bat-файла перед ее выполнением.
Маленькое предупреждение: если параметров не будет вообще, то ДОС не преминет об этом сообщить.
К любому из выражений можно подставить слово NOT, которое, как несложно догадаться, заставляет инструкцию IF'а выполняться, только если ее условие ложно. Простейший пример выглядит так:

if exist command.com echo There is a command.com file in the current directory
if not exist command. com echo There is NO file named command.com in the current directory

Какие действия он выполняет, по-моему, вполне очевидно.
Помимо оператора условия IF, в командном языке ДОС присутствует и оператор циклов FOR, предназначенный для циклического выполнения определенных инструкций. Правда, интерпретация этой команды несколько нестандартна — она имеет вид:

for %%A in (TXT CPP H EXE) do copy mygame.%%A C:\games\mygame

Не пугайтесь. На самом деле все достаточно просто. Вышеназванная инструкция просто скопирует файлы mygame.txt, mygame.exe, mygame.cpp, mygame.h из текущей папки, если они там есть, в папку C:\GAMES\MYGAME. Цикл выполняется следующим образом: вместо параметра %%A или любого другого, стоящего сразу после инструкции for, подставляется первое слово из скобок после in, а затем выполняется действие, стоящее после слова do, затем на место %%A становится уже второе слово из in'овских скобок и с результатом выполняется то же действие и т.д. Например, инструкция for %%FILE_NUMBER in (00 01 02) do del noname%%FILE_NUMBER.obj удалит из текущей папки файлы noname00.obj, noname01.obj, noname02.obj.

Зачастую при выполнении пакетного файла возникает необходимость перейти от одной части кода к другой, независимо от того, раньше или позже она расположена, пропуская все инструкции, стоящие между этими двумя участками BAT'а. Это реализуется с помощью команды goto. Чтобы обозначить нужный участок кода, его нужно пометить знаком :x, где вместо x стоит название метки. Например:

<…кусок кода…>
:metka
<…код метки…>
goto metka

В этом примере инструкции кода метки будут выполняться ad infinitum, т.е. до бесконечности, потому что каждый раз, когда команды будут выполнены, указание goto metka заставит ДОС снова вернуться к началу метки. В таких случаях описанное безобразие прекращается по нажатию на Ctrl-C или Ctrl-Break. Например, если нужно напечатать какой-то документ в нескольких экземплярах, можно воспользоваться следующим кодом:

echo off
: print
echo A copy of readme.txt is being printed…
echo Press Ctrl-Break or Reset if when you get tired of this:-)…
copy readme.txt prn
pause
goto print

В данном случае DOS будет печатать документ readme.txt, если, конечно, таковой имеется в текущей папке, до полного истощения расходников принтера и даже дальше;-).
Есть еще весьма примечательная команда SHIFT, обеспечивающая сдвиг формальных параметров относительно фактических. Говоря по-русски, если пакетный файл был вызван с тремя параметрами, например: view readme.txt please, то формальному обозначению %1 изначально соответствует параметр view, %2 — readme.txt, %3 — please. После вызова инструкции SHIFT %1 будет соответствовать слову readme.txt, а %2 — please. После еще одного вызова параметру %1 будет соответствовать слово please, а если инструкция будет выполнена еще раз, то вообще ничего не останется8-].

И последняя часто употребляемая в BAT'ах команда — exit. Если вы из одного пакетного файла запустили другой, то без использования этой команды обратно в первый командный файл управление не возвращается.
Ну вот мы и получили необходимый минимум знаний о пакетных файлах. Теперь продолжим начатую мной в прошлой статье тему — команды ДОС. На этот раз обсудим инструкции, используемые несколько реже, но тоже достаточно полезные.
В прошлый раз, говоря о файловых операциях, я забыл упомянуть команду RD (или RMDIR), служащую для удаления папки. Ее параметр — имя папки, а ключей нет.

Команды DATE и TIME выводят на экран текущую дату и время соответственно, кроме того, если задать им в качестве параметра новое значение даты или времени, то системным часам будут установлены введенные величины.
Зачастую приходится искать в текстовых файлах какую-то строку. Сделать это можно с помощью инструкции find. Первый ее параметр — строка для поиска, второй — файлы, в которых его требуется выполнить. Ключ /V заставляет DOS выводить все файлы, НЕ содержащие строку. Если нужно искать текст без учета регистра символов, воспользуйтесь ключом /I.

Команда sort, имеющая вид: sort <файл для сортировки> > <файл конечного результата> предназначена для сортировки слов в текстовом файле в алфавитном порядке и сохранения результатов в файл, указанный после знака ">". Более подробно об инструкциях find и sort можно узнать, набрав "find /?" или "sort /?".

Чтобы узнать версию установленной ОС, введите команду ver.
Команда format предназначена для форматирования флоппи- или жесткого диска. Ее параметр — имя диска. Ключ /Q включает быстрое форматирование, занимающее несколько меньше времени, чем стандартное, и невозможное в случае, если диск никогда не форматировался ранее. Весьма часто используется ключ, задающий емкость диска — /F:X, где вместо X ставится объем форматируемого диска (e.g. 160, 320, 720 Кб, 1.2, 1.4 Мб). Ключ /1 позволяет отменить двустороннее форматирование, попробуйте использовать его, если что-то глючит.

Если возникает необходимость перенести системные файлы на какой-либо диск, воспользуйтесь командой sys X:, где X: — диск для переноса.

В следующий раз мы немного поговорим об устройстве ДОС, Esc-последовательностях и еще о множестве непонятных терминов, значение которых я постараюсь объяснить8-). А на сегодня все. До новых встреч!

Михаил Федотов, aka $ky$pe@R,
skyspear@tut.by 

© компьютерная газета

 

                                               Назад                                         Дальше

Powered by X-ray.Издательство"Самопал"©2004

Hosted by uCoz