Windows cmd глобальная переменная

Работа с переменными окружения в командной строке (CMD)

Как вывести все переменные окружения в командной строке

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

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

Для сохранения вывода в файл:

Этот текстовый файл output.txt можно открыть в любом редакторе, например в Notepad.

Как показать значение переменной в CMD

Для показа значения переменной используйте знакомую команду set:

Команда set выводит значение всех переменных, которые начинаются на строку ПЕРЕМЕННАЯ. К примеру, предыдущая команда выведет значение переменных PATH и PATHEXT.

А следующая команда выведет значения всех переменных, чьё имя начинается на P:

Как установить значение переменной

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

В после выполнения этой команды вам будет показано приглашение командной строки для ввода значения переменной:

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

расширит действие переменной среды PATH, заменяя каждое вхождение «str1» в расширенном результате на «str2». «str2» может быть пустой строкой для эффективного удаления вхождений «str1» из расширенного вывода. «str1» может начинаться со звёздочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части «str1».

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

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

В результате будет полностью удалена ПЕРЕМЕННАЯ. Обратите внимание, что используется знак равенства, но в отличие от предыдущей команды, не используется флаг /P. Поэтому значение не просто становится равным пустой строке, а происходит удаление переменной целиком.

Windows: Создать Переменную Окружения — CMD & PowerShell

Что такое переменная окружения в Windows? Переменная окружения — это динамический «объект», содержащий редактируемое значение, которое может быть использовано одной или несколькими программами в Windows.

В этой заметке я покажу, как задать переменную окружения в Windows из командной строки (CMD) и из Windows PowerShell.

В приведенных ниже примерах я покажу создание нескольких типов переменных окружения.

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

Дельный Совет: Добавление директории в переменную окружения %PATH% в Windows! Читать далее →

Установить Переменную Окружения Для Текущей Сессии

Установить переменную окружения для текущей терминальной сессии:

Вывести на экран значение переменной окружения:

Дельный Совет: Добавление директории в переменную окружения %PATH% в Windows! Читать далее →

Задать Постоянную Переменную Окружения

Запуск от Имени Администратора: Команда setx доступна только начиная с Windows 7 и требует командной строки с повышенными правами. Она работает как в командной строке Windows (CMD), так и в Windows PowerShell.

Читайте также:  Линукс при сухом кашле

Создать постоянную переменную окружения, которая будет доступна только текущему пользователю:

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

Info: Чтобы увидеть изменения после выполнения команда setx — откройте новую командную строку.

Windows cmd глобальная переменная

Сообщения: 26991
Благодарности: 7877

При выполнении видно, что значение переменной MY_ERRORLEVEL1 в процесс yyy.cmd передается и им можно воспользоваться. »

Не так. Создаётся копия окружения родительского процесса «cmd.exe» (в котором исполняется пакетный файл «xxx.cmd»), и порождённый процесс «cmd.exe» (в котором исполняется пакетный файл «yyy.cmd») работает именно с ней.

Затем происходит изменение переменной MY_ERRORLEVEL1 и выход из файла. При этом новое значение переменной MY_ERRORLEVEL1 в процессе xxx.cmd (в родительском) не доступно, оно осталось старым и равно 1. »

Оно и не будет доступно, поскольку изменение происходит в окружении порождённого процесса «cmd.exe», являющемся копией окружения родительского процесса «cmd.exe».

Вопрос — как в дочернем процессе изменить значение переменной, определенной в родительском процессе? Причем изменить так, чтобы новое значение было доступно в родительском процессе? »

Ответ: в рамках заданной категории и выбранного механизма исполнения — никак.

P.S. общая задача такова — необходимо сделать бэкап 9 папок с разных компов. При этом, для экономии времени, копирование запускается в 9 процессов. При этом, на время выполнения дочерних процессов копирования, родительский процесс встает на паузу (ping -n 500 localhost > nul). Копирование может закончится ошибкой доступа — поэтому хочу возвращать из дочернего процесса значение переменной %ERRORLEVEL%, значение которой присвою переменным MY_ERRORLEVEL1..MY_ERRORLEVEL9 »

Суть проблемы в том, что мы можем либо исполнять последовательно, получая результат по ErrorLevel/ExitCode дочернего процесса, либо, как у Вас, параллельно — не имея возможности получить результат исполнения по ErrorLevel/ExitCode дочернего процесса.

Я бы подумал о переходе на WSH («WshRemote»), либо PowerShell («WinRM»). Если никак — попробуйте, например, писать результат из дочерних пакетных файлов в единый текстовый файл, по строчке на машину. Родительский пакетный файл очищает/удаляет его, затем запускает по «start» N порождённых пакетных файлов отдельно. Каждый из них по исполнении дописывает свой результат в единый текстовый файл. Всё это время, родительский пакетный файл в бесконечном цикле ожидания раз, допустим, в пять секунд проверяет этот текстовый файл на предмет наличия в нём записей от всех порождённых дочерних файлов. Как только все записи окажутся в наличии — происходит выход из цикла ожидания, разбор этого текстового файла и вывод результатов.

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

Dragokas

Very kind Developer

Ограничение от -2147483647 до 2147483647.

Вывод значения переменных

%RANDOM% — раскрывается в случайное десятичное число между 0 и 32767.(от 0 до (2^17)-1)

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

Читайте также:  Включение защитника windows через командную строку

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

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

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

Вывод определенного(ых) символа(ов) из строки
Символы номеруются начиная с 0!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Hp rtl8723de как установить windows 10 с флешки

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

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

Dragokas

Very kind Developer

Ограничение — будет модифицирована переменная. Следует выбрать переменную, модификация которой не нарушит работу скрипта или использовать setlocal / endlocal.

Undocumented Dynamic variables (read only)

Dragokas

Very kind Developer

Отличие от встроенного в CMD деления: исходное число (делимое) может превышать границу для числового типа данных CMD
(актуально для Гигабайтов данных, представленных в виде байтов, для дальнейшего перевода в более удобо-читаемую единицу измерения).

Принцип работы: если подстрока присутствует в строке, она будет удалена и результат не будет равен исходной строке.
Не работает с пустыми строками.

2. Вариант, когда подстрока тоже в переменной

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

Talory

Новый пользователь

Dragokas

Very kind Developer

Здравствуйте, @Talory !
Добро пожаловать на SafeZone.

О какой части статьи идёт речь?

Talory

Новый пользователь

Dragokas

Very kind Developer

Я не могу сказать, не увидев примера подобной записи.
Существуют различные форматы и кодировать их придётся по-разному.
Для изучения: https://safezone.cc/resources/registry-time-decoder.205/
И по этому поводу лучше создать отдельную тему.

В общем случае, перевод с 10-СС в 16 будет через Batch выглядеть так:

JAXSWAGGER

Новый пользователь

Dragokas

Very kind Developer

IF [/I] строка1 оператор_сравнения строка2 команда

EQL — равно
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,

JAXSWAGGER

Новый пользователь

Dragokas

Very kind Developer

Похоже, ошибка во встроенной документации.

Вместо EQL должно быть EQU
/i — не нужна т.к. у вас сравнение математическое, а не текстовое
Переменную нужно подавать в раскрытом виде:

Второй вариант с кавычками безопаснее, если сравниваете строки.

Переменную можно не раскрывать только в математических операциях при участии оператора set /a

m00slim25

Новый пользователь

Заметил несколько ошибок:

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

m00slim25

Новый пользователь

Dragokas

Very kind Developer

Спасибо за комментарии, дополнил.

m00slim25

Новый пользователь

При использовании нетривиальных вычислений. Например, в случае переполнения при использовании операторов битового сдвига. Эти операторы просто не определяют переполнение, вследствие чего последующая побитовая инверсия даёт ошибочный результат.

ЗЫ. Только не просите примеры, они где то далеко и глубоко закопаны Да Вы и сами можете исследовать эту особенность, это несложно
ЗЫЫ. Любой, кто использует вычисления подобного рода в командной оболочке, способен самостоятельно расследовать подобные инциденты, выявить причину ошибочных результатов, и принять меры, чтобы избежать этих инцидентов. Я привёл тот комментарий лишь для информативности: знание — сила. Можете игнорировать его, если он Вас каким-либо образом напрягает.

Dragokas

Very kind Developer

Да, верю. Я проверил побитовую инверсию на максимальных числах и у меня всё посчитало правильно.
Но если речь о битовых сдвигах, ещё и переполнении, то тогда всё понятно.

Оцените статью