Всем привет.
Использование переменных среды.
В пакетных файлах можно использовать своеобразные переменные, которые задаются в виде ключ=значение. В дальнейшем при обработке команд каждое вхождение подстроки %ключ% заменяется на значение.
Переменные среды бывают трех видов:
- глобальные переменные устанавливаются в свойствах операционной системы или специальной внешней утилитой setx и доступны с одними и теми же значениями при запуске всех пакетных файлов.
- локальные переменные устанавливаются и используются по-своему в каждом отдельном сценарии, сохраняются только во время его выполнения, а также передаются в дочерние сценарии при вложенных вызовах.
- псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.
В следующей таблице приведен выборочный список наиболее интересных переменных среды.
При использовании переменных можно также использовать выделение подстрок.
Для установки значений переменных используется команда set.Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда
Вычисление арифметических выражений.
Команда set поддерживает особое расширение синтаксиса:
set /a выражение
В следующей таблице представлены арифметические операторы, поддерживающие параметр /a, в порядке убывания приоритета.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.
Пример использования вычисления выражений:
set /a "a=!5^5, b=2, a>>=2, c=a+b, d=2*2"
@echo %a%=1, %b%=2, %c%=3, %d%=4
Потоки ввода/вывода.
Потоки используются в командных сценариях для унифицированного распределения и перенаправления ввода/вывода.
В следующей таблице представлены стандартные потоки.
Каждый поток может быть связан с каким-либо устройством ввода/вывода.
В следующей таблице представлены стандартные устройства.
В качестве устройств могут также выступать файлы, заданные по имени.
По умолчанию все стандартные потоки связаны с устройством CON.
В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.
Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.
Далее приведены некоторые примеры.
Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).
solution.exe <input.txt >output.txt 2>nul
Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.
call compile_all.cmd %SOLUTION% %TARGET% >>compile.log 2>&1
Дописывание содержимого одного файла в конец другого.
more <report.txt >>$result$.txt
Поэкранный вывод списка элементов текущего каталога.
dir | more
Поэкранный вывод имен всех фидошников города Гомеля, отсортированных по алфавиту.
(for /f "usebackq tokens=5 delims=, " %%i in (`find /i "Gomel" R45Point`) do @echo %%i) | sort | more
Организация циклов.
Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:
for {%переменная|%%переменная} in (множество) do команда [ПараметрыКоманднойСтроки]
Параметры:
- {%переменная|%%переменная}
Обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I).
- (множество)
Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными.
- команда
Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр (множество).
- ПараметрыКоманднойСтроки
Задает параметры командной строки, которые используются с указанной командой.
Подробнее команда описана в справке. Здесь приведены несколько примеров, иллюстрирующих ее возможности.
Перебор фиксированного множества параметров.
for %%i in (DirInfo,File_Id.diz,Descript.ion,Read.Me,ReadMe.*,FILES.BBS) do @set descr=%%i & @if exist %%i goto found
goto notfound
:found
@echo В текущем каталоге доступно описание в файле %descr%
:notfound
Итерация по файлам.
@set sz=0
@for /r %temp% %%i in (*.*) do @set /a sz+=%%~zi & @echo %%i %%~zi
@echo Размер временного каталога: %sz%
Итерация по каталогам.
@echo off
echo Поддерживаемые компиляторы:
for /d %%i in (d:\delta\lngs\*) do @echo %%~ni
Численная итерация.
@for /l %%i in (1,1,5) do @echo %%i
@echo ...вышел зайчик погулять.
Итерация и разбор файлов.
Команда for может также употребляться для чтения строк из файлов и их синтаксического разбора.
В этом случае используется следующий синтаксис:
FOR /F ["options"] %переменная IN (набор) DO команда [параметры]
FOR /F ["options"] %variable IN ("literal string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
или, если использован параметр usebackq:
FOR /F ["options"] %variable IN (filenameset) DO command [command-parameters]
FOR /F ["options"] %variable IN ('literal string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр "options" служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:
Поясняющий пример:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j - для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.
Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.
Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.
Еще один пример:
@echo Разбор $result$.txt
for /f "usebackq delims=" %%i in ($result$.txt) do (@set val=%%i) & @goto next
:next
@set /a nval=val+0
if not "%val%"=="%nval%" (@echo Не число!) & @goto :eof
if %val% lss 0 (@echo Меньше нуля!) & @goto :eof
@echo Начислено %val% баллов.
Организация блокировок.
Иногда бывает необходимо обеспечить, чтобы какой-либо скрипт мог выполняться только в единственном экземпляре. Для этого нужно, чтобы скрипт мог за одну элементарную операцию одновременно попытаться установить блокировку и узнать, удалось ли это. На роль такой операции подходит команда создания каталога md (mkdir). При таком подходе наличие блокировки определяется по факту существования определенного каталога, а успех выполнения команды md можно проверить по коду возврата (errorlevel).
Далее приведен иллюстрирующий пример.
@rem Устанавливаем блокировку на повторный запуск
set lockdir=%tmp%\some_lock
md %lockdir%
if not errorlevel 1 goto :work
@echo Aborting because of lock: %lockdir%
@echo (Other instance of %~nx0 has not finished yet)
@goto :eof
:work
@rem some work...
@rem Снимаем блокировку
rd %lockdir%
Установка цвета консоли.
Команда color позволяет менять цвет консоли.
Например, "color 0A". Первый символ соответствует цвету фона, второй - текста.
0 = Черный 8 = Серый
1 = Синий 9 = Светло-синий
2 = Зеленый A = Светло-зеленый
3 = Голубой B = Светло-голубой
4 = Красный C = Светло-красный
5 = Лиловый D = Светло-лиловый
6 = Желтый E = Светло-желтый
7 = Белый F = Ярко-белый
Цвет создаваемой консоли позволяет менять также опция /t команды cmd.
Автор шпаргалки Vadim Kopichenko.
Удачи.
No comments:
Post a Comment
А что вы думаете по этому поводу?