ТОП 10:

Rem Выведет строку FileName echo FileName



 

rem Выведет значение переменной FileName - tmp.dat echo %filename%

 

Чтобы удалить переменную среды, команду set необходимо вызвать в виде:

set имя_переменной=

 

Например:

 

rem удаляем переменную среды FileName set FileName=

 

Если имя переменной не найдено в текущей среде, то при возврате команда setимя_переменнойустановит значение специальной переменной средыerrorlevelравным1.Это свойство можно использовать в командных файлах дляопределения наличия определенной переменной. Из последнего примера видно, что имена переменных для Cmd.exe регистронезависимы.

 

Значение некоторых полезных на практике переменных среды по команде set не выдаются. В основном, это переменные, принимаемые значения которых динами-чески изменяются, их перечень приведен в таблице 5:

 

  Таблица 5. Динамически изменяемые переменные среды
Имя переменной Описание
среды  
%CD% Принимает значение строки текущего каталога
   
%DATE% Принимает значение текущей даты
   
%TIME% Принимает значение текущего времени
   
%RANDOM% Принимает значение случайного десятичного числа в
  диапазоне 1-32767.
   
%ERRORLEVEL% Принимает текущее значение кода завершения команды
  или скрипта ERRORLEVEL
   
%CMDEXTVERSION% Принимает значение версии командного процессора
  CMD.EXE для расширенной обработки команд.
   
%CMDCMDLINE% Принимает значение строки, которая вызвала командный
  процессор
   

 

В связи с тем, что переменные среды хранят преимущественно строковую информацию, для работы с подобными переменными характерны специфичные операции поиска, замены, удаления подстрок. Командный интерпретатор предос-


 


тавляет встроенные средства поддержки подобных операций в команде set. На-пример, следующая команда:

 

set переменная1=%переменная2:строка1=строка2%

 

присвоит переменной1 измененное значение переменной2. Команда найдет в пе-ременной2 все вхождения строки1,заменит их на содержимое строки2 и преоб-разованное таким образом значение переменной2 будет присвоено переменной1. Рассмотрим пример

 

@echo off

 

set s1=one two three one two three set s2=%s1:one=four%

 

set s3=%s1:two=% echo %s2%

 

echo %s3%

 

В результате получим на экране

 

Four two three four two three one three one three

 

Если значение строки должно формироваться как конкатенация (объеди-нение) двух и более других строк, то их достаточно записать последовательно друг за другом:

 

@echo off set s1=one set s2=two

 

set s3=%s1% %s2% echo %s3%

 

В результате получим на экране

 

One two

 

Еще одна интересная возможность – копирование подстроки. Для этого команду set необходимо вызывать в виде:

 

set переменная1=%переменная2:~m,n%

 

Эта команда возьмет значение второй указанной переменной (переменная2), вырежет из него подстроку длиной n символов начиная с (m+1)-гo и запишет ре-зультат в первую переменную (переменная1).

@echo off

 

set d=12.12.2012 set month=%d:~3,2% set year=%d:~6,4% set hour=%time:~0,2% echo %month%

 

echo %year% echo %hour%

 

Значением переменной month будет значение месяца, а year - года из даты, хранящейся в переменной d в формате dd.mm.yyyy. Значение переменной hour выделяем из переменной окружения %time%.

 

Зачастую информация, подлежащая хранению и обработке, должна быть представлена в числовом виде. Например, если потребуется подсчитать суммар-


 


ный размер, занимаемый файлами в папке, или для подсчета количества запущен-ных процессов. В этом случае команду set необходимо использовать с ключом /A.

 

set /А переменная=выражение

 

Использование ключа /A означает, что стоящая справа от знака равенства строка является числовым выражением, значение которого необходимо вычис-лить. Численные значения для команды set — это десятичные числа, кроме чисел с префиксами 0x для шестнадцатеричных чисел и 0 для восьмеричных чисел. Та-ким образом число 20 можно представить как 0x14 и 024.

 

Например, если задать команду

 

SET /А Sum=5+6

 

то значение переменной Sum будет равно одиннадцати.

 

Все операторы, поддерживаемые командой set, приведены в таблице 6. Строки таблицы отсортированы в порядке убывания приоритета.

 

Таблица 6. Операторы, поддерживаемые при арифметических вычислени-ях командой set.

Оператор Выполнение оператора  
 
( ) Группировка  
     
* / % + - Арифметические действия  
     
<< >> Логический перенос  
     
& Поразрядное И  
     
^ Поразрядное исключающее ИЛИ  
     
| Поразрядное ИЛИ  
     
= *= /= %= += -= &= ^= |= <<= >>= Операторы присваивания  
     
, Разделитель выражения  
     

 

В связи с тем, что такие знаки как % >> << & | функционально ”перегру-жены” (используются для обозначения нескольких операций в разных контекстах использования), то при их использовании необходимо заключить строку выраже-ния в кавычки.

 

Если в выражении встречается строка, не являющаяся числовой лексемой, то оно будет интерпретирована как имя переменной среды, команда set преобра-зует ее значение в числовую форму и использует в выражении для формирования результата. Если в выражении используется переменная с именем, не определен-ным в текущем сеансе командной строки или это значение не может быть преоб-разовано в числовую форму, то вместо нее подставляется нулевое значение. Это позволяет использовать переменные среды в арифметических выражениях без об-рамления их имен знаками %. Следующий пример иллюстрирует выполнения арифметических операций с переменными среды.

 

@echo off set a=5 set b=25

 

set /a c=b/a+tmpVar set c

 

В результате выполнения новой переменной среды c будет присвоено зна-чение 5, и на экран будет выведено ее значение (а также всех переменных среды,


 


начинающихся с символа с). Переменная tmpVar не была определена, поэтому ее значение при вычислении значения выражения будет принято за 0.

 

Значение переменной можно задать и как результат работы команды. Так можно получить серийный номер тома текущего диска:

 

@echo off

 

vol | find “:” >out.tmp set /p var= <out.tmp set serial=%var:~22,9% del out.tmp

 

echo %serial%

 







Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.234.244.18 (0.01 с.)