Вывод, задание и удаление переменных среды cmd.exe. SET [переменная=[строка]] переменная Имя переменной среды. строка Строка символов, присваиваемая указанной переменной. Введите SET без параметров для вывода текущих переменных среды. Изменение команды SET при включении расширенной обработки команд: Если при вызове указать только имя переменной без знака равенства и значения, команда SET выведет значения всех переменных, имя которых начинается с указанной строки. Например: SET P Эта команда выведет значения всех переменных, имена которых начинаются с 'P'. Если имя переменной не найдено в текущей среде, при возврате команда SET установит значение ошибки ERRORLEVEL 1. Команда SET не допускает использование знака равенства в имени переменной среды. Команда SET поддерживает два дополнительных ключа: SET /A выражение SET /P variable=[promptString] Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется. Обработчик выражений очень прост и поддерживает следующие операции, перечисленные в порядке убывания приоритета: () - группировка ! ~ - - унарные операторы * / % - арифметические операторы + - - арифметические операторы > - двоичный сдвиг & - двоичное И ^ - двоичное исключающее ИЛИ | - двоичное ИЛИ = *= /= %= += -= - присвоение &= ^= |= >= , - разделитель операторов При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения. Слева от любого оператора присваивания должно стоять имя переменной среды. Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18. Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются. Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым. Подстановка переменной среды может быть расширена следующим образом: %PATH:str1=str2% расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в расширенном результате на "str2". "str2" может быть пустой строкой для эффективного удаления вхождений "str1" из расширенного вывода. "str1" может начинаться со звездочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части "str1". Можно также использовать строки расширения. %PATH:~10,5% расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины. %PATH:~-10% извлечет последние 10 символов переменной PATH. %PATH:~0,-2% извлечет все символы переменной PATH, за исключением 2-х последних. Наконец, добавлена поддержка связывания времени выполнения для переменных среды окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /? Связывание времени выполнения для переменных среды окружения полезно при обходе ограничений раннего связывания, которое происходит при первом чтении текстовой строки, а не при ее выполнении. Следующий пример демонстрирует возникающую проблему при использовании раннего связывания переменных: set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения ) Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF подставляется в момент первого использования в первом IF, в том числе и в тело первого ветвления IF, которое является составным выражением. В IF внутри составного выражения в действительности сравниваются значения "before" и "after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку: set LISTfor %i in (*) do set LIST=%LIST% %i echo %LIST% в данном случае список файлов текущей папки никогда не будет построен. Вместо этого, значением переменной LIST будет имя последнего найденного файла. И вновь, это случилось потому, что %LIST% подставляется всего один раз - в момент обработки выражения FOR, когда список еще пуст. Фактически, приведенный фрагмент эквивалентен следующему примеру: for %i in (*) do set LIST= %i в котором имя последнего найденного файла сохраняется в переменной LIST. Связывание времени выполнения для переменных среды окружения происходит при использовании специального символа (восклицательного знака), обозначающего проведение сопоставления во время выполнения. Если включена поддержка связывания времени выполнения, то для достижения ожидаемых результатов приведенные выше фрагменты должны быть изменены следующим образом: set VAR=befor if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения ) set LISTfor %i in (*) do set LIST=!LIST! %i echo %LIST% При включенной расширенной обработке команд доступны несколько переменных среды, которые не отображаются в списке, отображаемом при вызове команды SET. Значения этих переменных вычисляются динамически каждый раз при их извлечении. Если пользователь явно задает переменные с одним из этих имен, то это определение перекрывает соответствующее динамическое определение, описанное ниже: %CD% - раскрывается в строку текущей директории. %DATE% - раскрывается в текущую дату, используя тот же формат команды DATE. %TIME% - раскрывается в текущую дату, используя формат команды TIME. %RANDOM% - раскрывается в случайное десятичное число между 0 и 32767. %ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL %CMDEXTVERSION% - раскрывается в текущее значение версии расширенной обработки команд. %CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала командный процессор. Дополнительную информацию о переменных смотрите в разделе ПЕРЕМЕННЫЕ.