Урок 3 по CMD — работа с переменными

Урок 3 по CMD — работа с переменными Командная строка

Объявление собственных переменных является неотъемлемой часть практически любого языка программирования, так в языке vbscript они объявляются с помощью ключевого слова dim, а в jscript – используется ключевое слово var.

Переменные командной строки Windows представляют немного другой характер, тут нельзя объявить группу переменных cmd, или же сразу присвоить значения нескольким переменным в командной строке. Давайте посмотрим на следующие строчки кода:

set Var1=D:\Work
set Var2=100
set Var3="Привет Мир!!!"

В данном примере, с помощью ключевого слова cmd set мы поэтапно объявили три переменные (Var1, Var2 и Var3), как и в языке vbscript, в cmd регистр символов не играет роли, поэтому, данные строчки выведут фразу «Привет Мир!!!»

set Var3
set VAR3
set vAr3

или

echo %Var3%
echo %VAR3%
echo %vAr3%

Стоит учитывать один момент, запись

set var1=100

и

set var1 = 100

это не одно и тоже, то есть, в первом случае мы создаем cmd переменную «var1», а во втором – «var1 «. С присвоением значений аналогичная ситуация, так что обращайте внимание на пробел!!!

Видим, что бы вывести значение переменной с помощью функции Echo, мы заключаем ее в символ «%», для set – просто прописываем ее имя, так же стоит учитывать, что всем переменным присваивается строковой тип.

Если вы запустите на выполнение команду cmd set, которая выводит список всех переменных и их значений в текущем сеансе, то увидите, что там будут присутствовать и только что созданные cmd переменные и переменные среды. Мы сможем обращаться к ним на протяжение всего сеанса работы.

Что бы очистить переменные в командной строке Windows от их содержимого, нужно просто присвоить пустое значение:

setVar3=

Мы просто после имени прописали знак равенства и все. Стоит помнить, что если в таких языках программирования как vbscript и jscript присвоение пустого значения переменной не влияет на ее существование, то в командной строке происходит полное ее удаление, то есть, команда:

echo%Var3%

просто выведет строчку %Var3%, а команда

set Var3

Выведет сообщение «переменная среды var3 не определена»

Стоит учитывать тот момент, что если мы хотим, что бы переменная командной строки Windows содержала специальные символы (например, @ < > & | ^ ), то их нужно экранировать.  В языке jscript для вывода специальных символов используются esc-последовательности, в командной строке специальный символ экранируется с помощью «^»:

set Var4=100 ^&3 = 5
set Var5=100 ^^3

В данном примере мы экранировали символы & и ^, тем самым присвоив фразы:

«100 & 3 = 5»
«100 ^3»

Стоит обратить внимание, что если мы попытаемся вывести значения данных переменных с помощью функции cmd set, то проблем не возникнет, но если будет использовать функцию echo, то получим совсем не тот результат, что ожидали. Так, при попытке выполнить следующую команду:

echo %var4%

Получим предупреждение:

100
«3» не является внутренней или внешней командой, исполняемой программой или командным файлом.

Это происходит из-за повторного анализа спец-символов при использовании функции echo. Надо просто прописать символ «^» экранирования не один раз, а трижды:

set Var4=100 ^^^&3 = 5
set Var5=100 ^^^^3

Теперь при выполнении кода:

echo %var4%
echo %var5%

все пройдет успешно.

Как и в сценариях сервера Windows Script Host, переменные в командной строке Windows могут содержать заданную область видимости.

Область видимости – блок кода, за пределами которого нельзя получить доступ к переменным, объявленным в нем. Довольно ясно значение области видимости проявляется при роботе с функциями, по этому вопросу можете прочить статью «Урок 3 по JScript: Объявление пользовательских функций«.

Понятно, что переменные cmd, созданные в текущем окне командной строки недоступна для других процессов, но, есть возможность задать ограничения еще большие.

переменные командной строки windows

Что бы задать локальную область видимости, используется блок SETLOCAL … ENDLOCAL. Все cmd переменные командной строки Windows, объявленные в середине данного блока не будут видны за его пределами. Откройте редактор (я использую редактор Notepad++, так как он сразу подсвечивает код), и пропишите в нем следующие строчки кода:

@echo off
set var1=0
rem Начало локализации
setlocal
set var1=5
echo Lokalnaya: var1= %var1%
endlocal 
echo Globalnaya: var1= %var1%

Видим, что вначале мы объявили var1 и присвоили ей значение 0, далее мы снова объявили переменную с аналогичным именем, но уже в блоке SETLOCAL … ENDLOCAL. В сценарии происходит вывод значения как локальной, так и глобальной var1. Я специально использовал латинские знаки, что бы у вас в случае чего не выводились крякозябры.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий для Юри Отменить ответ

  1. Юри

    как xcopy работает с переменными? задал переменную

    SET xdate=05-19-2015
    команда
    xcopy \\comp\folder /s /e /h /z /d:%xdate%

    не выполняет копирование, а в окне cmd безостановочно выписываются строки друг за другом:
    xcopy \\comp\folder /s /e /h /z /d:05-19-2015

    (т.е. информация из переменной читается, но команда xcopy не выполняется) .
    С датой вместо переменной — копирует.

    Ответить