отображение и изменение переменных среды окружения Windows

&nbsp &nbsp Команда SET используется для просмотра и изменения переменных среды окружения в командной строке Windows. Переменные окружения — это переменные, принимаемые значения которых характеризуют среду, в которой выполняется текущая программа — пути системных файлов, сведения об аппаратных средствах, каталоги пользователя и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных процессов или с помощью команды SET. Для просмотра значения, принимаемого конкретной переменной можно воспользоваться командой :

SET переменная
SET PATH — отобразить значение переменной PATH
Для создания новой переменной, или изменения значения существующей, используется команда :

SET переменная=строка

переменная — Имя переменной среды.


строка — Строка символов, присваиваемая указанной переменной.

SET MyName=Vasya — установить значение переменной MyName

SET path=C:\progs;%path% — изменить значение переменной PATH, добавив в начало строки C:\progs

Значение, принимаемое переменной , доступно для обработки в командных файлах, при использовании ее имени, заключенного в знаки процента — % . Например команда выдачи текста на дисплей ECHO в виде:

ECHO date — выведет на экран слово «date», а команда
ECHO %date% выведет на экран значение переменной date, т.е. текущую дату в формате операционной системы.

Команда SET без параметров используется для вывода текущих значений переменных среды.

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd. exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData \Local\Temp
TMP=C:\Users\Usr\AppData \Local\Temp
USERDOMAIN=test7
USERNAME=Usr
USERPROFILE=C:\Users\Usr
windir=C:\windows

Кроме переменных, отображаемых в списке, при вызове команды SET, существуют и другие, значения которых изменяется динамически:

%CD% — принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION% значение версии расширенной обработки команд CMD.EXE.

%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор .

Если при вызове команды SET указать только часть имени, то будет выведен список переменных, имена которых начинаются с указанной строки. Например:

SET U — выведет значения всех переменных, имена которых начинаются с ‘U’.

Команда SET поддерживает два дополнительных ключа:

SET /A выражение

SET /P variable=[promptString]

Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется.


|
=
,
— группировка
— арифметические операторы
— арифметические операторы
— двоичный сдвиг
— двоичное И
— двоичное исключающее ИЛИ
— двоичное ИЛИ
— присвоение
— разделитель операторов

При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения.

Слева от любого оператора присваивания должно стоять имя переменной среды. Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс:

0x — для шестнадцатеричных чисел

0 — для восьмеричных чисел.

Пример использования префиксов:

SET /A REZ=0xA+012
ECHO %REZ%

В данном командном файле значение переменной REZ вычисляется сложением числа 10, представленного в шестнадцатеричном виде ( 0xA ) и числа 10 , представленного в восьмеричном ( 012 ).

Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым. Данный ключ позволяет организовать диалог с пользователем в командном файле:

@ECHO OFF
SET /P NAME=Введите имя пользователя:

SET /P pass=Введите пароль:
ECHO Имя пользователя — %NAME% , Пароль — %PASS%

В командных файлах довольно часто требуется работать с частью значения, принимаемого переменной, для чего используются подстановочные значения:

переменная:строка1=строка2 — заменяет в принимаемом значении переменной строку1 на строку2

Следующий командный файл использует замену символа «точка» на символ «тире» в значении переменной, соответствующем текущей дате:

@ECHO OFF
set tm=%DATE%
ECHO Дата1 = %tm%
SET tm=%DATE:.

=-%
ECHO Дата2 = %tm%

Для выделения части значения, принимаемого переменной, используется следующая конструкция:

переменная:~x,y — где x — число пропускаемых символов от начала строки, а y — количество символов, используемых в качестве значения переменной.

Следующий пример использует отображение текущего времени без секунд и долей секунд (только первые 5 символов из стандартного значения переменной TIME):

@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:~0,5%

ECHO Время2 = %tm%

Если значение y ( длина ) не указана, то используется оставшееся до конца строки значение переменной. Если значение y отрицательно, то используется часть строки значения переменной от конца. Предыдущий пример можно изменить , указав, что в принимаемом значении времени отбрасываются 6 символов от конца:

@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:~0,-6%
ECHO Время2 = %tm%

Возможно использование число пропусков не задано, и используется отрицательное число, то принимаемое значение будет частью переменной от конца строки:

%PATH:~-10% — извлечет последние 10 символов переменной PATH

. Нулевое значение можно не указывать, сохраняя формат подстановки:

%PATH:~0,-2% эквивалентно %PATH:~,-2%

При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой :

Setlocal EnableDelayedExpansion

Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:

Setlocal EnableDelayedExpansion
@ECHO OFF
set VAR=before
if «%VAR%» == «before» (
set VAR=after
if «!VAR!» == «after» @echo Со знаком процента=%VAR% , Со знаком вопроса=!VAR!
)

Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым ( тем, что было установлено до входа в подпрограмму ). Аналогичная же проблема наблюдается и тогда, когда значение переменной изменяется внутри цикла команды FOR. Например, для получения списка файлов текущего каталога такой командный файл не будет работать:

set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%

Значение переменной LIST внутри цикла изменено не будет. Для того, чтобы это произошло, командный файл нужно изменить следующим образом:

Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%

Теперь, значение переменной LIST внутри цикла FOR будет изменяться, последовательно принимая значения имен файлов, разделенных пробелом ( set LIST=!LIST! %%i)

Статья — Переменные в CMD, команда SET и арифметика | SafeZone

Статья от 22.12.2011
Автор: Ris и Гимаев Наиль
Источник​

Переменные. 17)-1)

set /a random10=%random%/3277

Выводит случайное число от 0 до 9.
У меня это число по нелепой псевдослучайности цифру секунды
%CD% — раскрывается в строку текущей директории.
%DATE% — раскрывается в текущую дату, используя тот же формат команды DATE.
%TIME% — раскрывается в текущую дату, используя формат команды TIME.
%ERRORLEVEL% — раскрывается в текущее значение ERRORLEVEL.
Уровень ошибки, 0 — это нет ошибки, 1 — это есть ошибка, а другие это номера ошибки.

Чтобы получить полный список переменных и их значений введите команду SET

Операции со строковыми или численными переменными

Соединение 2-ух строковых переменных

set x=Gaz
set y=Prom
echo %x%%y%
(GazProm)

Вывод определенного(ых) символа(ов) из строки

Символы номеруются начиная с 0!
set str=babywka

Вывод 1-ого символа

echo %str:~0,1%
(b)

Вывод 3-х символов с конца строки

echo %str:~-3%
(wka)

Вывод всей строки кроме 2-ух первых символов

echo %str:~2%
(bywka)

Вывод всей строки кроме 2-ух последних символов

echo %str:~0,-2%
(babyw)

Вывод 3-х символов начиная с 3

echo %str:~2,3%
(byw)

Удаление подстроки из строки

set str=babywka
echo %str:ba=%
(bywka)

Замена подстроки из строки на другую подстроку

set str=babywka
echo %str:bab=xlop%
(xlopywka)

Удаление кавычек(«) из строки

set str2="qwerty"
echo %str2:"=%
(qwert)

В данном случае: если кавычки в начале и конце строки — можно юзать

echo %str2:~1,-1%
(qwert)

Существуют 2 способа использовать переменную в переменной, например:

вывод n-ого символа

Первый способ с call set

call set x=%%str:~%n%,1%%
echo %x%

Второй способ с for и setlocal enabledelayedexpansion

setlocal enabledelayedexpansion
for /l %%i in (%n%,1,%n%) do (set x=!str:~%%i,1!)
echo %x%

тут неважно что в for писать, главное

set x=!str:~%n%,1!

писать в do
С циклами мы разберемся в следующей статье.
Но, пока уточню: если код второго способа юзать в пакетном файле (BATнике), то вместо %i юзаем %%i.

Операции с числовыми переменными

Увеличивание на единицу

set /a x+=1

Увеличивание в 2 раза

set /a x+=%x%

аналогично

set /a x*=2

Возведение в квадрат

set /a x*=%x%

Возведение в куб

set /a x=%x%*%x%*%x%

Деление
Деление в CMD является целочисленным!(то есть делится до целого числа)

set /a x=15
set /a y=4
set /a xy=%x%/%y%
(3)

Сложение

set /a x=5
set /a y=-6
set /a xy=%x%+%y%
(5+(-6)=5-6=-1)

Вычитание

set /a x=5
set /a y=-6
set /a xy=%x%-%y%
(5-(-6)=5+6=11)

Вычисление остатка от деления

set /a xy=%x% "%" %y%

(при записи в батник, процент «%» нужно удваивать «%%»)

Унарные операторы

Логическое отрицание (Logical NOT)

set /a y="!"%x%

дает результат(%y%)1 (True), если переменная(%x%) равна 0 (False), и 0 (False)(%y%) в любых других случаях

Например
set /a x=5
set /a y="!"%x%
(0)
set /a x=0
set /a y="!"%x%
(1)

Побитовая инверсия (Bitwise NOT):

set /a y="~"%x%

дает результат -1-%x%(%y%)
Например

set /a x=5
set /a y="~"%x%
(-1-5=-(1+5)= -6)
set /a x=-3
set /a y="~"%x%
(-1-(-3)=-1+3=3-1= 2)

Унарный минус (устанавливает/сбрасывает знаковый бит)

set /a y="-"%x%

дает результат 0-%x%(%y%)
Например

set /a x=5
set /a y="-"%x%
(-5)
set /a x=-3
set /a y="-"%x%
(3)

Двоичные операторы

set x=3
(в двоичной системе счисления - 0011)
set y=5
(в двоичной системе счисления - 0101)

Побитовое И (AND)

Побитовое И — это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0.

set /a xy=%x%"&"%y%
(1, в двоичной системе счисления - 0001)

Побитовое ИЛИ (OR)

Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1.

set /a xy=%x%"|"%y%
(7, в двоичной системе счисления - 0111)

Побитовое исключающее ИЛИ (XOR)

Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на

одинаковых позициях в двоичных представлениях операндов. «%y% (6, в двоичной системе счисления — 0110)

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига.
Различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).
При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.

Двоичный арифметический сдвиг

Арифметический сдвиг аналогичен логическому, но значение слова считается знаковым числом, представленным в дополнительном коде.
Так, при правом сдвиге старший бит сохраняет свое значение. Левый арифметический сдвиг идентичен логическому.

Вправо

set /a xy=%x%">>"1
(1, в двоичной системе счисления - 0011->0001)
set /a xy2=%y%">>"1
(2, в двоичной системе счисления - 0101->0010)
set /a n=13
(в двоичной системе счисления - 1101)
set /a xn=%n%">>"2
(3, в двоичной системе счисления - 1101->0011)
set /a my=-%y%">>"1
(-3, в двоичной системе счисления - 1011(-5)->1101(-3))

Влево

set /a xy=%x%"<<"1
(6, в двоичной системе счисления - 0011->0110)
set /a xy2=%y%"<<"1
(10, в двоичной системе счисления - 0101->1010)
set /a xy3=%y%"<<"4
(80, в двоичной системе счисления - 0101->1010000)
set /a my=-%y%"<<"1
(-10, в двоичной системе счисления - 1011(-5)->10110(-10))

Максимальный размер отдельной переменной среды составляет 8192 байта. (у меня выходило только 8184, наверное это вместе с названием…)
Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.

И я забыл, про 8-ричную и 16-ричную систему счисления в CMD

Системы счисления

Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18.

Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.

Восьмеричная система счисления

set /a x=022
(Это 22 в восьмеричной системе счисления, и 18 в десятичной)

Можно производить все операции, также как и с десятеричными числами.
Но после задания значения переменной, значение хранится в десятичной системе счисления.
Например, сложение

set /a xy=022+07
(Это 22+7=31 в восьмеричной системе счисления, и 31 в десятичной)

Шестнадцатеричная система счисления

set /a x=0x3A
(Это 3A в восьмеричной системе счисления, и 58 в десятичной)

Вычитание

set /a xy=0x3A-0x66
(Это 3A-66=-54 в восьмеричной системе счисления, и -44 в десятичной)

Сохранение в переменной вывода программы
К сожаление, передача вывода программ на вход команды set не работает:

echo 1|set /p AA=""
set AA

Поэтому можно воспользоваться временным сохранением в файл:

echo 1> 0. <rar.log.tmp') do @echo %%J >rarfilename.tmp
set /p rarfilename="" <rarfilename.tmp
del rarfilename.tmp

Узнать имя последнего изменённого файла в папке:

dir /b /a-d /o-d *.* >%temp%\0.tmp
set /p lastfile="" <%temp%\0.tmp
del %temp%\0.tmp
echo "%lastfile%"

Комментарий от Dragokas :
По сути эта команда считывает в переменную первую строку файла:

set /p stroka=<file.txt

Комментарий от m00slim25:
Эти операции, как и все остальные, поддерживают кавычный синтаксис:

set /a "y=!%x%"
set /a "y=~%x%"
set /a "y=-%x%"

Оператор == используется только для строчного сравнения. Кавычки необходимы если в переменной/операнде имеются пробелы.
Для арифметического сравнения необходимо использовать арифметические операторы:
EQU : Равно (=)
NEQ : Не равно (!=)
LSS : Меньше (<)
LEQ : Меньше или равно (<=)
GTR : Больше (>)
GEQ : Больше или равно (>=)
Использовать операторы, указанные в скобках, не представляется возможным, потому что, например, операторы < и > являются указателями перенаправления ввода-вывода.

Set — Переменная среды — Windows CMD

Set — Переменная среды — Windows CMD — SS64.com
  • SS64
  • CMD
  • Практическое руководство

Показать, установить или удалить переменные среды CMD. Изменения, сделанные с помощью SET, останутся только на время действия текущего CMD-сеанс.

 Синтаксис
      НАБОР  переменная 
      SET  переменная  =  строка 
      КОМПЛЕКТ " переменная  =  строка  "
      НАБОР " переменная ="

      SET /A  "переменная  =  выражение "
      SET /P  переменная  = [ promptString ]
      НАБОР "

Ключ
     переменная  : новое или существующее имя переменной среды, например. _num
     string  : Текстовая строка для присвоения переменной.

     выражение  : Арифметическое выражение
   /A : см. полную информацию об арифметических выражениях ниже. 

Имена переменных не чувствительны к регистру, но содержимое может быть.

Рекомендуется избегать использования каких-либо символов-разделителей (пробелов, запятых и т. д.) в имени переменной .

Символы-разделители могут использоваться в значении , если полное присвоение заключено в двойные кавычки, чтобы предотвратить интерпретацию разделителя.

Любые лишние пробелы вокруг имени переменной или строки будут , а не следует игнорировать, SET не прощает лишних пробелов, как многие другие языки сценариев. Поэтому используйте SET alpha=beta, а не SET alpha = beta

.

Первый символ имени не должен быть цифрой. Обычной практикой является префикс имен переменных с символом undescore или знаком доллара _variable или $variable. Эти префиксы не требуются, но помогают предотвратить путаницу со стандартными встроенными переменными среды Windows или любыми другими командными строками.

Оболочка CMD не сможет прочитать переменную среды, если она содержит более 8 191 символа.

Показать переменную:

В большинстве случаев окружайте имя переменной символами %, и будет использоваться значение переменной
например Чтобы отобразить значение переменной _department с ЭХО-команда:
ЭХО %_department%

Если имя переменной не найдено в текущей среде, SET установит %ERRORLEVEL% в 1 .
Это можно обнаружить с помощью IF ERRORLEVEL …

Включение дополнительных символов может быть полезно для отображения любого пробела:
ЭХО [%_department%]
ЭХО «%_department%»

Введите SET без параметров, чтобы отобразить все текущие переменные среды.

Введите SET с именем переменной, чтобы отобразить эту переменную
SET _department

Команда SET, запущенная со строкой (без знака равенства), отобразит список всех соответствующих переменных с подстановочными знаками

Отображение переменных, начинающихся с «P»:
НАБОР стр.
Показать переменные, начинающиеся с символа подчеркивания
НАБОР _

Установить переменную:

Пример хранения текстовой строки:

C:\> SET _dept=Продажи и маркетинг
C:\> установить _
_dept=Продажи и маркетинг

Установить переменную, содержащую символ перенаправления, обратите внимание на положение кавычек, которые не сохраняются:

НАБОР «_dept=Продажи и маркетинг»

Одна переменная может основываться на другой, но это не динамическая
Например.

C:\> установить «хх=рыба»
C:\> установить «msg=%xx% чипсов»
C:\> установить сообщение
msg=рыбные чипсы

C:\> установить «xx=колбаса»
C:\> установить сообщение
msg=рыбные чипсы

C:\> установить «msg=%xx% чипов»
C:\> установить сообщение
msg=колбасные чипсы

Избегайте начинать имена переменных с числа, это позволит избежать неправильной интерпретации переменной как параметра
%123_myvar% < > %1 23_myvar

Для отображения недокументированных системных переменных:

 КОМПЛЕКТ " 

Значения с пробелами — использование двойных кавычек

Хотя это и желательно, добавлять кавычки при присвоении значения, включающего пробелы, не требуется:

SET _variable=один два три

Для специальных символов, таких как &, все выражение следует заключить в кавычки.
Содержимое переменной будет , а не , включая окружающие кавычки:

НАБОР » _variable=один и два »

н. б. если вы поместите значение только в кавычки, то эти кавычки будут сохранены:

SET _variable= » one & two »

Имена переменных с пробелами

Переменная может содержать пробелы, а также само имя переменной может содержать пробелы, поэтому следующее присвоение:
НАБОР _var = Мой текст
создаст переменную с именем «_var» — обратите внимание на завершающий пробел

Запрос пользовательского ввода

Переключатель /P позволяет установить переменную, равную строке ввода, введенной пользователем.
Строка подсказки отображается перед чтением пользовательского ввода.

 @эхо выключено
Set /P _dept=Пожалуйста, введите отдел || Установить _dept=NothingChosen 
Если "%_dept%"=="NothingChosen" перейти к sub_error
Если /i "%_dept%"=="finance" перейти к sub_finance
Если /i "%_dept%"=="hr" перейти к sub_hr перейти: eof :sub_finance echo Вы выбрали финансовый отдел перейти: eof :sub_hr echo Вы выбрали отдел кадров
goto:eof :sub_error эхо Ничего не выбрано

Строка подсказки может быть пустой. Имя переменной также можно оставить пустым, но это недокументировано.

Если пользователь ничего не вводит (просто нажимает клавишу возврата), то переменная не изменится, а уровень ошибки будет равен 1.

Команда CHOICE является альтернативой SET /P (но CHOICE принимает только один символ/нажатие клавиши).

Эхо строки без завершающих CR/LF

Стандартная команда ECHO всегда добавляет CR/LF в конец каждой отображаемой строки, возвращая курсор в начало следующей строки.
SET /P этого не делает, поэтому его можно использовать для отображения строки. Вставьте символ NUL в SET /P, чтобы он не ждал ввода пользователя:

Set /P _scratch=»Это сообщение для пользователя»

Поместить первую строку файла в переменную:

Установить /P _MyVar= Эхо %_MyVar%

Вторая и все последующие строки текста в файле будут удалены.

В очень ранних версиях CMD любой возврат каретки/новые строки (CR+LF) перед первой строкой, содержащей текст, игнорировался.

Удалить переменную

Введите SET только с именем переменной и знаком равенства:

SET _department=

Еще лучше, чтобы убедиться, что после знака = нет пробела в конце, поместите выражение в круглые скобки или кавычки:
(УСТАНОВИТЬ _отдел =)
или
УСТАНОВИТЬ «_department=»

Арифметические выражения (SET /a)

Заключение выражений в «кавычки» необязательно для простой арифметики, но обязательно для любого выражения, использующего логические операторы.

При ссылке на переменную в вашем выражении SET /A позволяет вам опустить %, поэтому _myvar вместо %_myvar%

Любое вычисление SET /A, возвращающее дробный результат, будет округлено в меньшую сторону до ближайшего целого числа.

Оцениваемое выражение может включать следующие операторы:
Для использования оператора Modulus (%) в командной строке или в пакетном сценарии его необходимо удвоить до (%%), как показано ниже. 3″ Сдвиг. (знаковый бит ⇨ 0) Арифметический сдвиг. >> Правый Shift. (Заполняет бит знака таким образом, чтобы отрицательное число всегда оставалось отрицательным.) Ни ShiftRight, ни ShiftLeft не обнаружат переполнения. <<= Набор переменных левого сдвига /a "_num<<=2" >>= Набор переменных правого сдвига /a «_num>>=2» ( ) Набор выражений группы скобок /a «_num=(2+3)*5» , Набор выражений, разделенных запятыми /a «_num=2,_result=_num*5»

Если имя переменной указано как часть выражения, но не определено в текущей среде, тогда SET /a будет использовать значение 0.

Операторы арифметического сдвига SET /A не обнаруживают переполнение, которое может вызвать проблемы для любой нетривиальной математики, например. побитовое инвертирование часто неправильно меняет знак +/- результата.

См. примеры SET /a ниже и эту ветку форума для получения дополнительной информации.
также см. SetX, VarSearch и VarSubstring для получения дополнительной информации об управлении переменными.

SET /A должен работать во всем диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647), но на практике для отрицательных целых чисел он не будет опускаться ниже -2 147 483 647, потому что правильный результат дополнения до двух 2 147 483 648 вызовет положительное переполнение.

Примеры:

НАБОР/А «_result=2+4»
(=6)

НАБОР/A «_result=5»
(=5)
НАБОР /A «_результат += 5″
(=10)

НАБОР /A «_result=2 << 3″
(=16) { 2 Lsh 3 = двоичный 10 Lsh 3 = двоичный 10000 = десятичный 16 }

SET /A «_result=5 %% 2″
(=1) { 5/2 = 2 + 2 остаток 1 = 1 }

SET /A «_var1=_var2=_var3=10»
(устанавливает 3 переменные в одно и то же значение — недокументированный синтаксис.)

SET /A будет обрабатывать любую строку символов в выражении как имя переменной среды. Это позволяет вам выполнять арифметические действия с окружающей средой переменные без необходимости вводить какие-либо знаки %, чтобы получить значения. НАБОР/A «_result=5 + _MyVar»

В одной строке можно выполнить несколько расчетов, разделяя каждый расчет запятыми, например:

Установите «_year=1999»
Установить /a «_centre=_year/100, _next=_centre+1»

Все числа должны находиться в диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647). Для обработки больших чисел используйте PowerShell или VBScript.

Ведущий ноль будет указывать Octal

Числовые значения являются десятичными числами, если перед ними не стоит цифра 9.0069 0x для шестнадцатеричных чисел,
0 для восьмеричных чисел.

Таким образом, 0x10 = 020 = 16 десятичных чисел

Восьмеричная запись может сбивать с толку — все числовые значения, начинающиеся с нуля, рассматриваются как восьмеричные, но 08 и 09 не являются допустимыми восьмеричными цифрами.
Например, SET /a «_month=07» вернет значение 7, а SET /a «_month=09» вернет ошибку.

Постоянные изменения

Изменения, сделанные с помощью команды SET, НЕ являются постоянными, они применяются только к текущему приглашению CMD и остаются только до закрытия окна CMD.
Чтобы навсегда изменить переменную в командной строке, используйте SetX
. или с графическим интерфейсом: Панель управления ➞ Система ➞ Среда ➞ Системные/пользовательские переменные

Постоянное изменение переменной с помощью SetX не повлияет на уже открытое приглашение CMD.
Только новые подсказки CMD получат новую настройку.

Конечно, вы можете использовать SetX в сочетании с SET для одновременного изменения обоих:

Установить _Library=T:\Library\
SetX _Library T:\Library\ /m

Изменить среду для других сеансов

Ни SET, ни SetX не повлияют на другие сеансы CMD, которые уже запущены на машине. Это хорошо, особенно на многопользовательских компьютерах, вашим сценариям не придется бороться с динамически изменяющейся средой во время их работы.

Можно добавить постоянные переменные среды в реестр (HKCU\Environment), но это недокументированный (и, вероятно, неподдерживаемый) метод, который не вступит в силу до следующего входа пользователя в систему.

Переменные системной среды можно найти в реестре здесь:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

ВЫЗОВ

Синтаксис CALL SET расширит любые переменные, переданные в той же строке, что полезно, если вам нужно установить одну переменную на основе значения другой переменной. CALL SET также может оценивать переменную подстроку, на странице CALL есть более подробная информация об этом методе, хотя во многих случаях более быстрое решение — использовать Setlocal EnableDelayedExpansion.

Autoexec.bat

Любая инструкция SET в c:\autoexec.bat будет анализироваться во время загрузки
Переменные, установленные таким образом, недоступны для 32-битных графических программ — они не будут отображаться в панели управления.
Они появятся в командной строке CMD.

Если autoexec.bat ВЫЗЫВАЕТ какие-либо вторичные пакетные файлы, дополнительные пакетные файлы НЕ будут анализироваться при загрузке.
Такое поведение может быть полезно на ПК с двойной загрузкой.

Уровни ошибок

Когда расширения команд CMD включены (по умолчанию):

Уровень ошибки
Если переменная была успешно изменена без изменений , обычно это будет 0, но если предыдущая команда установила уровень ошибки, он будет сохранен (это ошибка).
SET Переменная не найдена или неверное имя.
SET _var=значение, когда имя _var начинается с «/» и не заключено в кавычки.
SET /P Пустой ответ от пользователя.
1
КОМПЛЕКТ /A Несбалансированные скобки 1073750988
SET /A Отсутствует операнд 1073750989
SET /A Синтаксическая ошибка 1073750990
КОМПЛЕКТ /A Неверный номер 1073750991
SET /A Число больше 32 бит 1073750992
SET /A Деление на ноль 1073750993

SET — это внутренняя команда.
Если расширения команд отключены, все команды SET отключены, кроме простых назначений, таких как: _variable=MyText

# Я зациклился на тебе
# Я зациклился на тебе… — Руди Кларк (Джеймс Рэй/Джордж Харрисон)

Связанные команды

Синтаксис — VarSubstring Извлечь часть переменной (подстроку).
Синтаксис — VarSearch Поиск и замена части переменной.
Синтаксис — Переменные среды — Список переменных по умолчанию.
ВЫЗОВ — Оценка переменных среды.
ENDLOCAL — Завершить локализацию изменений среды, используйте для возврата значений.
ВЫХОД — Установить конкретный уровень ошибки.
ПУТЬ — Отображение или установка пути поиска исполняемых файлов.
REG — Чтение или установка значений реестра.
SETLOCAL — Начать локализацию изменений переменных среды.
SETX — установить переменную среды на постоянной основе.
WMIC ENVIRONMENT — установка переменных среды через WMI.
Параметры — получить полный или частичный путь из переменной командной строки.
StackOverflow — Сохранение новой строки в переменной.
Эквивалент PowerShell: Set-Variable — установка переменной и значения (set/sv).
Эквивалент PowerShell: Read-Host — запрос ввода данных пользователем.
Эквивалентная команда bash (Linux): env — отображение, установка или удаление переменных среды.


 

Copyright © 1999-2023 SS64.com
Некоторые права защищены

набор | Microsoft Узнайте

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья
  • 4 минуты на чтение

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

Примечание

Для этой команды требуются расширения команд, которые включены по умолчанию.

Команда set также может выполняться из консоли восстановления Windows с использованием других параметров. Дополнительные сведения см. в разделе Среда восстановления Windows (WinRE).

Синтаксис

 set [<переменная>=[<строка>]]
установить [/p] <переменная>=[<строка подсказки>]
установить /a <переменная>=<выражение>
 

Параметры

Параметр Описание
<переменная> Указывает переменную среды для установки или изменения.
<строка> Задает строку, которую следует связать с указанной переменной среды.
/стр Устанавливает значение <переменная> в строку ввода, введенную пользователем.
<строка подсказки> Задает сообщение, запрашивающее у пользователя ввод. Этот параметр должен использоваться с параметром /p .
/ Устанавливает в числовое выражение, которое оценивается.
<выражение> Задает числовое выражение.
/? Отображает справку в командной строке.
  • Если расширения команд включены (по умолчанию) и вы запускаете 9 ) или в кавычках при использовании в (например, «StringContaining&Symbol»). Если вы используете кавычки для заключения строки, содержащей один из специальных символов, кавычки устанавливаются как часть значения переменной среды.

  • Используйте переменные среды для управления поведением некоторых пакетных файлов и программ, а также для управления внешним видом и работой Windows и подсистемы MS-DOS. Команда set часто используется в Файл Autoexec.nt для установки переменных среды.

  • Если вы используете команду set без каких-либо параметров, отображаются текущие настройки среды. Эти параметры обычно включают переменные среды COMSPEC и PATH , которые используются для поиска программ на диске. Windows использует две другие переменные среды: PROMPT и DIRCMD .

  • Если указать значения для и указанное значение добавляется в среду, а связывается с этой переменной. Если переменная уже существует в среде, новое строковое значение заменяет старое строковое значение.

  • Если указать только переменную и знак равенства (без ) для команды set , значение , связанное с переменной, очищается (как будто переменной нет).

  • При использовании параметра /a поддерживаются следующие операторы в порядке убывания приоритета:

    9=
    Оператор Операция выполнена
    ( ) Группировка
    ! ~ - Унарный
    * / % Арифметика
    + - = <<= >>=
    , Разделитель выражений
  • Если вы используете логические ( && или || ) или модульные ( % ) операторы, заключите строку выражения в кавычки. Любые нечисловые строки в выражении считаются именами переменных среды, и их значения перед обработкой преобразуются в числа. Если вы указываете имя переменной среды, которое не определено в текущей среде, назначается нулевое значение, что позволяет выполнять арифметические действия со значениями переменных среды без использования % для получения значения.

  • Если запустить set /a из командной строки вне командного сценария, отобразится окончательное значение выражения.

  • Числовые значения являются десятичными числами, если перед ними не стоит префикс 0× для шестнадцатеричных чисел или 0 для восьмеричных чисел. Следовательно, 0×12 совпадает с 18, что совпадает с 022.

  • Поддержка отложенного расширения переменных среды по умолчанию отключена, но вы можете включить или отключить ее с помощью cmd /v .

  • При создании пакетных файлов вы можете использовать set для создания переменных, а затем использовать их так же, как вы использовали бы пронумерованные переменные с %0 по %9 . Вы также можете использовать переменные с %0 по %9 в качестве входных данных для набора .

  • Если вы вызываете значение переменной из пакетного файла, заключите значение в знаки процента ( % ).