ОС Лаб.работа №5 (1069344), страница 5
Текст из файла (страница 5)
На самом же делетаким образом сработает только файл 1.bat, а файл 2.bat два раза выведетстроку "a=1"!Данную ошибку можно обойти, если для получения значенияпеременной вместо знаков процента (%) использовать восклицательный знак(!) и предварительно включить режим связывания времени выполнениякомандой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, длякорректной работы файл 2.bat должен иметь следующий вид:SETLOCAL ENABLEDELAYEDEXPANSIONSET a=1ECHO a=%a%(SET a=2ECHO a=!a! )2.5 Приостановка выполнения командных файловДля того, чтобы вручную прервать выполнение запущенного bat-файла, нужнонажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>.
Однако часто бываетнеобходимо программно приостановить выполнение командного файла вопределенной строке с выдачей запроса на нажатие любой клавиши. Этоделается с помощью команды PAUSE. Перед запуском этой команды полезнос помощью команды ECHO информировать пользователя о действиях,которые он должен произвести.Команду PAUSE обязательно нужноиспользовать привыполнениипотенциально опасных действий (удаление файлов, форматирование дисков ит.п.).Например,ECHO Сейчас будут удалены все файлы в C:\Мои документы!ECHO Для отмены нажмите Ctrl-CОперационные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)28PAUSEDEL "C:\Мои документы\*.*"2.6 Вызов внешних командных файловИз одного командного файла можно вызвать другой, просто указав его имя.Например:ECHO OFFCLSREM Вывод списка log-файловDIR C:\*.logREM Передача выполнения файлу f.batf.batCOPY A:\*.* C:\PAUSEОднако в этом случае после выполнения вызванного файла управлениев вызывающий файл не передается, то есть в приведенном примере командаCOPY A:\*.* C:\ (и все следующие за ней команды) никогда не будетвыполнена.Для того, чтобы вызвать внешний командный файл с последующимвозвратом в первоначальный файл, нужно использовать специальную командуCALL файлНапример:ECHO OFFCLSREM Вывод списка log-файловDIR C:\*.logREM Передача выполнения файлу f.batCALL f.batCOPY A:\*.* C:\PAUSEОперационные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)29В этом случае после завершения работы файла f.bat управление вернется впервоначальный файл на строку, следующую за командой CALL (в примереэто команда COPY A:\*.* C:\ ).2.7 Операторы переходаКомандный файл может содержать метки и команды GOTO перехода кэтим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается приобработке командного файла как метка. Имя метки задается наборомсимволов, следующих за двоеточием до первого пробела или конца строки.Пример. Пусть имеется командный файл следующего содержания:ECHO OFFCOPY %1 %2GOTO Label1ECHO Эта строка никогда не выполнится:Label1REM Продолжение выполненияDIR %2После того, как в этом файле выполнение дойдёт до команды GOTOLabel1 его выполнение продолжается со строки REM ПродолжениевыполненияВ команде перехода внутри файла GOTO можно задавать в качествеметки перехода строку :EOF, которая передает управление в конец текущегопакетного файла (это позволяет легко выйти из пакетного файла безопределения каких-либо меток в самом его конце).Также для перехода к метке внутри текущего командного файла кромекоманды GOTO можно использовать и рассмотренную выше команду CALL:CALL :метка аргументаПри вызове такой команды создается новый контекст текущегопакетного файла с заданными аргументами, и управление передается наинструкцию, расположенную сразу после метки.
Для выхода из такогоОперационные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)30пакетного файла необходимо два раза достичь его конца. Первый выходвозвращает управление на инструкцию, расположенную сразу после строкиCALL, а второй выход завершает выполнение пакетного файла.Например, если запустить с параметром "Копия-1" командный файлследующего содержания:@ECHO OFFECHO %1CALL :2 Копия-2:2ECHO %1то на экран выведутся три строки:Копия-1Копия-2Копия-1Таким образом, подобное использование команды CALL очень похожена обычный вызов подпрограмм (процедур) в алгоритмических языкахпрограммирования.2.8 Операторы условияС помощью команды IF … ELSE (ключевое слово ELSE можетотсутствовать) в пакетных файлах можно выполнять обработку условийнескольких типов.
При этом если заданное после IF условие принимаетистинное значение, система выполняет следующую за условием команду (илинесколько команд, заключенных в круглые скобки), в противном случаевыполняется команда (или несколько команд в скобках), следующие заключевым словом ELSE.2.8.1.1 Проверка значения переменнойПервый тип условия используется обычно для проверки значенияпеременной. Для этого применяются два варианта синтаксиса команды IF:IF [NOT] строка1==строка2 команда1 [ELSE команда2]Операционные системы. Лаб.работа №5 (ОС Windows.
Командная строка CMD.Командные файлы)31(квадратные скобки указывают на необязательность заключенных в нихпараметров) илиIF [/I] [NOT] строка1 оператор_сравнения строка2 командаВ первом варианте условие строка1==строка2 (здесь необходимо писатьименно два знака равенства) считается истинным при точном совпаденииобеих строк.
Параметр NOT указывает на то, что заданная командавыполняется лишь в том случае, когда сравниваемые строки не совпадают.Строки могут быть литеральными или представлять собой значенияпеременных (например, %1 или %TEMP% ). Кавычки для литеральных строкне требуются.Например,IF %1==%2 ECHO Параметры совпадают!IF %1==Петя ECHO Привет, Кира!При сравнении строк, заданных переменными, следует проявлятьопределенную осторожность. Дело в том, что значение переменной можетоказаться пустой строкой, и тогда может возникнуть ситуация, при которойвыполнение командного файла аварийно завершится.Например, если вы не определили с помощью команды SET переменнуюMyVar, а в файле имеется условный оператор типаIF %MyVar%==C:\ ECHO Ура!!!то в процессе выполнения вместо %MyVar% подставится пустая строка ивозникнет синтаксическая ошибка.
Такая же ситуация может возникнуть, еслиодна из сравниваемых строк является значением параметра командной строки,так как этот параметр может быть не указан при запуске командного файла.Поэтому при сравнении строк нужно приписывать к ним в начале какойнибудь символ, например:IF -%MyVar%==-C:\ ECHO Ура!!!С помощью команд IF и SHIFT можно в цикле обрабатывать всепараметры командной строки файла, даже не зная заранее их количества.Операционные системы. Лаб.работа №5 (ОС Windows.
Командная строка CMD.Командные файлы)32Следующий командный файл (primer.bat) выводит на экран имязапускаемого файла и все параметры командной строки:ECHO OFFECHO Выполняется файл: %0ECHO.ECHO Файл запущен со следующими параметрами...REM Начало цикла:BegLoopIF -%1==- GOTO ExitLoopECHO %1REM Сдвиг параметровSHIFTREM Переход на начало циклаGOTO BegLoop:ExitLoopREM Выход из циклаECHO.ECHO Все.Если запустить primer.bat с четырьмя параметрами:primer.bat А Б В Гто в результате выполнения на экран выведется следующая информация:Выполняется файл: primer.batФайл запущен со следующими параметрами:АБВГВсе.Операционные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)33Рассмотрим теперь оператор IF в следующем виде:IF [/I] строка1 оператор_сравнения строка2 командаСинтаксис и значение операторов_сравнения представлены в табл. 3.Таблица 3.
Операторы сравнения в IFОператор ЗначениеEQLРавноNEQНе равноLSSМеньшеLEQМеньше или равноGTRБольшеGEQБольше или равноПример использования операторов сравнения:ECHO OFFCLSIF -%1 EQL –Вася ECHO Привет, Вася!IF -%1 NEQ –Вася ECHO Привет, но Вы не Вася!Ключ /I, если он указан, задает сравнение текстовых строк без учетарегистра. Ключ /I можно также использовать и в форме строка1==строка2команды IF. Например, условиеIF /I DOS==dos …будет истинным.2.9 Проверка существования заданного файлаВторой способ использования команды IF — это проверка существованиязаданного файла. Синтаксис для этого случая имеет вид:IF [NOT] EXIST файл команда1 [ELSE команда2]Условие считается истинным, если указанный файл существует.Кавычки для имени файла не требуются.Операционные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)34Пример командного файла, в котором с помощью такого вариантакоманды IF проверяется наличие файла, указанного в качестве параметракомандной строки.@ECHO OFFIF -%1==- GOTO NoFileSpecifiedIF NOT EXIST %1 GOTO FileNotExistREM Вывод сообщения о найденном файлеECHO Файл '%1' успешно найден.GOTO :EOF:NoFileSpecifiedREM Файл запущен без параметровECHO В командной строке не указано имя файла.GOTO :EOF:FileNotExistREM Параметр командной строки задан, но файл не найденECHO Файл '%1' не найден.2.10 Проверка наличия переменной средыАналогично файлам команда IF позволяет проверить наличие в системеопределенной переменной среды:IF DEFINED переменная команда1 [ELSE команда2]Здесь условие DEFINED применяется подобно условию EXISTS наличиязаданного файла, но принимает в качестве аргумента имя переменной средыи возвращает истинное значение, если эта переменная определена. Например:@ECHO OFFCLSIF DEFINED MyVar GOTO :VarExistsОперационные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)35ECHO Переменная MyVar не определенаGOTO :EOF:VarExistsECHO Переменная MyVar определена,ECHO ее значение равно %MyVar%2.11 Проверка кода завершения предыдущей командыЕще один способ использования команды IF — это проверка кодазавершения (кода выхода) предыдущей команды. Синтаксис для IF в этомслучае имеет следующий вид:IF [NOT] ERRORLEVEL число команда1 [ELSE команда2]Здесь условие считается истинным, если последняя запущенная командаили программа завершилась с кодом возврата, равным либо превышающимуказанное число.Составим, например, командный файл, который бы копировал файл my.txt надиск C: без вывода на экран сообщений о копировании, а в случаевозникновения какой-либо ошибки выдавал предупреждение:@ECHO OFFXCOPY my.txt C:\ > NULREM Проверка кода завершения копированияIF ERRORLEVEL 1 GOTO ErrOccurredECHO Копирование выполнено без ошибок.GOTO :EOF:ErrOccurredECHO При выполнении команды XCOPY возникла ошибка!В операторе IF ERRORLEVEL … можно также применять операторысравнения чисел.