ОС Лаб.работа №5 (1069344), страница 6
Текст из файла (страница 6)
Например:IF ERRORLEVEL LEQ 1 GOTO Case1Замечание.Операционные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)36Иногда более удобным для работы с кодами завершения программможет оказаться использование переменной %ERRORLEVEL%. (строковоепредставление текущего значения кода ошибки ERRORLEVEL ).2.12 Проверка версии реализации расширенной обработки командНаконец, для определения внутреннего номера версии текущейреализации расширенной обработки команд применяется оператор IF вследующем виде:IF CMDEXTVERSION число команда1 [ELSE команда2]Здесь условие CMDEXTVERSION применяется подобно условиюERRORLEVEL, но число сравнивается с вышеупомянутым внутреннимномером версии. Первая версия имеет номер 1. Номер версии будетувеличиватьсянаединицуприкаждомдобавлениисущественныхвозможностей расширенной обработки команд.
Если расширенная обработкакоманд отключена, условие CMDEXTVERSION никогда не бывает истинно.2.13 Организация цикловВ командных файлах для организации циклов используются несколькоразновидностей оператора FOR, которые обеспечивают следующие функции: выполнение заданной команды для всех элементов указанногомножества; выполнение заданной команды для всех подходящих имен файлов; выполнение заданной команды для всех подходящих имен каталогов; выполнение заданной команды для определенного каталога, а такжевсех его подкаталогов; получение последовательности чисел с заданными началом, концом ишагом приращения; чтение и обработка строк из текстового файла; обработка строк вывода определенной команды.2.13.1 Цикл FOR … IN … DO …Операционные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)37Самый простой вариант синтаксиса команды FOR для командных файловимеет следующий вид:FOR %%переменная IN (множество)DO команда [параметры]Перед названием переменной должны стоять именно два знака процента(%%), а не один, как это было при использовании команды FORнепосредственно из командной строки.Пример. Если в командном файле заданы строки@ECHO OFFFOR %%i IN (Раз,Два,Три) DO ECHO %%iто в результате его выполнения на экране будет напечатано следующее:РазДваТриПараметр множество в команде FOR задает одну или более текстовыхстрок, разделенных запятыми, которые вы хотите обработать с помощьюзаданной команды. Скобки здесь обязательны. Параметр команда [параметры]задает команду, выполняемую для каждого элемента множества, при этомвложенность команд FOR на одной строке не допускается.
Если в строке,входящей во множество, используется запятая, то значение этой строки нужнозаключить в кавычки. Например, в результате выполнения файла с командами@ECHO OFFFOR %%i IN ("Раз,Два",Три) DO ECHO %%iна экран будет выведеноРаз,ДваТриПараметр %%переменная представляет подставляемую переменную(счетчик цикла), причем здесь могут использоваться только именапеременных, состоящие из одной буквы.
При выполнении команда FORзаменяет подставляемую переменную текстом каждой строки в заданномОперационные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)38множестве, пока команда, стоящая после ключевого слова DO, не обработаетвсе такие строки.Замечание.Чтобы избежать путаницы с параметрами командного файла %0 — %9,для переменных следует использовать любые символы кроме 0 – 9.Параметр множество в команде FOR может также представлять однуили несколько групп файлов. Например, чтобы вывести в файл список всехфайлов с расширениями txt и prn, находящихся в каталоге C:\TEXT, безиспользования команды DIR, можно использовать командный файлследующего содержания:@ECHO OFFFOR %%f IN (C:\TEXT\*.txt C:\TEXT\*.prn) DO ECHO %%f >> list.txtПритакомиспользованиикомандыFORпроцессобработкипродолжается, пока не обработаются все файлы (или группы файлов),указанные во множестве.2.13.2 Цикл FOR /D … IN … DO …Следующий вариант команды FOR реализуется с помощью ключа /D:FOR /D %%переменная IN (набор) DO команда [параметры]В случае, если набор содержит подстановочные знаки, то командавыполняется для всех подходящих имен каталогов, а не имен файлов.Выполнив следующий командный файл:@ECHO OFFCLSFOR /D %%f IN (C:\*.*) DO ECHO %%fмы получим список всех каталогов на диске C:, например:C:\ArcC:\CYRC:\MSCANC:\NCОперационные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)39C:\Program FilesC:\TEMPC:\TeXC:\WINNT2.13.3 Цикл FOR /R … IN … DO …С помощью ключа /R можно задать рекурсию в команде FOR:FOR /R [[диск:]путь] %%переменная IN (набор)DO команда [параметры]В этом случае заданная команда выполняется для каталога [диск:]путь,а также для всех подкаталогов этого пути.
Если после ключа R не указано имякаталога, то выполнение команды начинается с текущего каталога. Например,для распечатки всех файлов с расширением txt в текущем каталоге и всех егоподкаталогах можно использовать следующий пакетный файл:@ECHO OFFCLSFOR /R %%f IN (*.txt) DO PRINT %%fЕсли вместо набора указана только точка (.), то команда проверяет всеподкаталоги текущего каталога. Например, если мы находимся в каталогеC:\TEXT с двумя подкаталогами BOOKS и ARTICLES, то в результатевыполнения файла:@ECHO OFFCLSFOR /R %%f IN (.) DO ECHO %%fна экран выведутся три строки:C:\TEXT\.C:\TEXT\BOOKS\.C:\TEXT\ARTICLES\.2.13.4 Цикл FOR /L … IN … DO …Операционные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)40Ключ /L позволяет реализовать с помощью команды FORарифметический цикл, в этом случае синтаксис имеет следующий: вид:FOR /L %%переменная IN (начало,шаг,конец) DO команда [параметры]Здесь заданная после ключевого слова IN тройка (начало, шаг, конец)раскрывается в последовательность чисел с заданными началом, концом ишагом приращения.
Так, набор (1,1,5) раскрывается в (1 2 3 4 5), а набор (5,1,1) заменяется на (5 4 3 2 1). Например, в результате выполнения следующегокомандного файла:@ECHO OFFCLSFOR /L %%f IN (1,1,5) DO ECHO %%fпеременная цикла %%f пробежит значения от 1 до 5, и на экраненапечатаются пять чисел:12345Числа, получаемые в результате выполнения цикла FOR /L, можноиспользовать в арифметических вычислениях. Рассмотрим командный файлmy.bat следующего содержания:@ECHO OFFCLSFOR /L %%f IN (1,1,5) DO CALL :2 %%fGOTO :EOF:2SET /A M=10*%1ECHO 10*%1=%M%В третьей строке в цикле происходит вызов нового контекста файлаmy.bat с текущим значением переменной цикла %%f в качестве параметраОперационные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)41командной строки, причем управление передается на метку :2 (см. описаниеCALL в разделе "Изменения в командах перехода"). В шестой строкепеременная цикла умножается на десять, и результат записывается впеременную M.
Таким образом, в результате выполнения этого файлавыведется следующая информация:10*1=1010*2=2010*3=3010*4=4010*5=502.13.5 Цикл FOR /F … IN … DO …Самые мощные возможности (и одновременно самый запутанныйсинтаксис) имеет команда: FOR с ключом /F:FOR /F ["ключи"] %%переменная IN (набор)DO команда [параметры]Здесь параметр набор содержит имена одного или нескольких файлов,которые по очереди открываются, читаются и обрабатываются. Обработкасостоит в чтении файла, разбиении его на отдельные строки текста ивыделении из каждой строки заданного числа подстрок. Затем найденнаяподстрока используется в качестве значения переменной при выполненииосновного тела цикла (заданной команды).По умолчанию ключ /F выделяет из каждой строки файла первое слово,очищенное от окружающих его пробелов.
Пустые строки в файлепропускаются.Необязательныйпараметр"ключи"служитдляпереопределения заданных по умолчанию правил обработки строк. Ключипредставляютсобойзаключеннуюприведенные в табл. 4 ключевые слова:Таблица 4. Ключи в команде FOR /Fвкавычкистроку,содержащуюОперационные системы. Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)КлючОписаниеEOL=CОпределение символа комментариев в начале строки42(допускается задание только одного символа)Число пропускаемых при обработке строк в началеSKIP=NфайлаDELIMS=XXXОпределение набора разделителей для заменызаданных по умолчанию пробела и знака табуляцииTOKENS=X,Y,M-Определение номеров подстрок, выделяемых изNкаждой строки файла и передаваемых для выполненияв тело циклаПрииспользованииключаTOKENS=X,Y,M-Nсоздаютсядополнительные переменные.
Формат M-N представляет собой диапазонподстрок с номерами от M до N. Если последний символ в строке TOKENS=является звездочкой, то создается дополнительная переменная, значениемкоторой будет весь текст, оставшийся в строке после обработки последнейподстроки.Применение этой команды на примере пакетного файла parser.bat,который производит разбор файла myfile.txt:@ECHO OFFIF NOT EXIST myfile.txt GOTO :NoFileFOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN(myfile.txt) DO @ECHO %%i %%j %%kGOTO :EOF:NoFileECHO Не найден файл myfile.txt!Здесь во второй строке производится проверка наличия файла myfile.txt;в случае отсутствия этого файла выводится предупреждающее сообщение.Команда FOR в третьей строке обрабатывает файл myfile.txt следующимобразом:Операционные системы.
Лаб.работа №5 (ОС Windows. Командная строка CMD.Командные файлы)43Пропускаются все строки, которые начинаются с символа точки сзапятой ( EOL=; ).Вторая и третья подстроки из каждой строки передаются в тело цикла,причем подстроки разделяются пробелами (по умолчанию) и/или запятыми (DELIMS=,).В теле цикла переменная %%i используется для второй подстроки, %%j— для третьей, а %%k получает все оставшиеся подстроки после третьей.В нашем примере переменная %%i явно описана в инструкции FOR, апеременные %%j и %%k описываются неявно с помощью ключа TOKENS=.Например, если в файле myfile.txt были записаны следующие три строки:ААА ББББ ВВВВ,ГГГГГ ДДДДЕЕЕЕЕ,ЖЖЖЖ ЗЗЗЗ;КККК ЛЛЛЛЛ МММММто в результате выполнения пакетного файла parser.bat на экран выведетсяследующее:ББББ ВВВВ ГГГГГ ДДДДЖЖЖЖ ЗЗЗЗЗамечаниеКлюч TOKENS= позволяет извлечь из одной строки файла до 26подстрок,поэтомузапрещеноиспользоватьименапеременных,начинающиеся не с букв английского алфавита (a–z).