
- •Глава 1. Интерфейсы операционных систем
- •1.1. Интерфейс командной строки Windows
- •1.1.1 Состав команд управления
- •Команды управления работой операционной системы
- •Команды командных (пакетных) файлов
- •Сетевые команды
- •1.1.2. Команды управления файловой системой Windows
- •1.2. Основы разработки командных (пакетных) файлов
- •If условие команда.
- •1.3. Использование программы Debug
If условие команда.
В качестве условия обычно используются:
Проверка наличия файла. В этом случае в качестве условия записывается фраза exist диск:путь\имя_файла.расш
Проверка кода завершения отдельных программ по значению внутренней переменной системы с именем Errorlevel. В этом случае в качестве условия записывается фраза “errorlevel значение”. Условие считается истинным, если код завершения равен или больше параметра значение. Командами OS, устанавливающими коды завершения, являются backup, diskcomp, diskcopy, format, graftabl, keyb, replace, restore, setver, xcopy. Значение переменной errorlevel может формироваться и многими вспомогательными (утилитами) и прикладными программами.
Проверка идентичности двух символьных строк. Строка условие при этом записывается в виде
строка_1==строка_2 (двойной знак =)
Предваряя любому из перечисленных условий слово not, можно проверять противоположное условие.
Составим командный файл test4.bat, проверяющий наличие в корневом каталоге диска файла автозагрузки (autoexec.bat) и отображающий его содержание. Обратите внимание на использование команды goto совместно с if.
echo off
cls
cd\
rem переход в корневой каталог текущего диска, в котором размещаются файлы
rem autoexec.bat и config.sys
if exist autoexec.bat goto m1
echo файла AUTOEXEC.BAT на этом диске нет!
goto end
:m1
type autoexec.bat
:end
Другой модификацией этого файла, использующей параметр not, может быть файл test5.bat, текст которого приведен ниже:
echo off
cls
cd\
if not exist autoexec.bat goto error
type autoexec.bat
goto end
:error
echo
: end
Видоизменим файл test5.bat таким образом, чтобы можно было отыскивать и просматривать нужный файл в любом каталоге. Учитывая, что файлы могут иметь большие размеры, превышающие емкость одного экрана, обеспечим поэкранный просмотр файлов. Имя нужного файла будем задавать в качестве параметра в строке вызова файла test6.bat. Например, так
test6.bat proba.txt
Здесь имя искомого файла proba.txt служит фактическим параметром, значение которого должно заменить формальные параметры %1 внутри командного файла. Напомним, что таких параметров строка вызова может иметь от %1 до %9. наш командный файл test6.bat будет иметь следующее содержание:
echo off
cls
if /%1==/ goto error1
if not exist autoexec.bat goto error2
type %1|more
goto end
:error1
echo Вы забыли указать имя искомого файла!
:goto end
:error2
echo файла %1 на этом диске нет!
:end
В этом фрагменте два слеша / в операторе if играют роль скобок.
Для многократного выполнения отдельных команд применяется команда for. Она позволяет обрабатывать целые группы файлов. Команда имеет следующие форматы:
for %%переменная in (набор) do команда - для строк командных файлов;
for %переменная in (набор) do команда – для режима командной строки (автономного выполнения команды).
В качестве параметров команды используются:
переменная – однобуквенная переменная, последовательно принимающая значения слов или имен файлов, перечисленных в параметре (набор);
(набор) – одно или несколько символьных слов или спецификаций файлов. Спецификация файла имеет вид диск:путь\имя_файла.расш. Допускаются шаблоны групповых операций. Слова и спецификации файлов разделяются пробелами или запятыми. Максимальная длина строки набора – не более 127 символов;
команда – команда DOS, выполняемая для каждого слова или файла из параметра набор.
Обычно в командный файл можно передавать до 9 параметров, иногда этого недостаточно. Команда shift (сдвиг) позволяет сдвигать строку параметров влево на один параметр. Применение данной команды позволяет снять ограничение на число параметров. Смысл использования данной команды лучше всего показать на простом примере. Создадим командный файл test8.bat, который отображает видимые системой параметры (от %0 до %9) строки запуска файла. Сдвиг каждый раз строки параметров позволяет увеличить число параметров. Текст файла test8.bat:
echo off
:start
if /%0== / goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto start
:end
Вызов этого файла будем проводить командой, в которой число параметров больше девяти:
test8.bat a s d f g h j k l z x c v b n m
Однобуквенные параметры командной строки можно интерпретировать как имена каких-то файлов, в данном случае несуществующих. Но следует учитывать, что имена файлов, используемые в качестве параметров командной строки не должны содержать расширений.
Результаты выполнения командного файла test8.bat показаны на следующей копии экрана. Здесь показана строка вызова командного файла с 16 параметрами. Каждый раз при выполнении команды echo выводятся первые 10 элементов строки, после чего вся строка сдвигается на одну позицию влево. Этот процесс заканчивается исчезновением параметров в строке и завершением работы файла.
Для уяснения динамики этого процесса можно между командами
…
shift
goto start
…
включить команду pause и увидеть этот процесс по шагам.
Рассмотрим еще один комплексный пример. Пусть требуется создать командный файл test9.bat, который будет копировать из текущего каталога на дискету целый ряд текстовых файлов с проверкой правильности записи и удалением исходных файлов. Перед каждым удалением файла должно выдаваться предупреждающее сообщение. В момент приостановки можно прервать дальнейшее выполнение командного файла, нажав клавиши <Ctrl>+C. Текст файла:
:loop
copy %1.txt A:/v
pause Удаляю скопированный файл
del %1.txt
shift
if not %1.==.goto loop
Запуск этого файла следует выполнять командой
test9.bat 01 02 03 04 05 06 07 08 09 10 11 12 и т.д., если текстовые файлы имеют имена 01.txt, 02.txt, 03.txt и т.д. Обратите внимание, что
по умолчанию здесь используется режим echo on. В противном случае сообщения команды pause были бы не видны;
расширения текстовых файлов присоединяются к имени непосредственно в командах выполняемого файла.
Задание для самостоятельной работы
1. В созданном каталоге сформируйте 3 - 4 текстовых файла, различающихся размерами и содержанием. В режиме командной строки затем выполните команду
for %d in (*.txt) do type %d
2. Измените набор, вместо шаблона файлов задайте имена файлов перечислением.
3. Создайте командный файл test7.bat со следующим содержанием:
echo off
for %%S in (%1) do copy %%S prn
Произведите запуск этого файла командой test7.bat *.txt. Поясните смысл включения в команду запуска строки *.txt, назначение всех знаков % в команде for.
4. Подсчитать количество выполняемых циклов в предыдущем примере. Для этого ввести переменную окружения и перед циклическим участком программы задать её значение (например, set /a d=0). В тело цикла включить подсчет числа повторений цикла (например, set /a d=d+1). После выхода из цикла прочитать значение числа повторов командой set /a d или командой echo %d%.