Настройка элемента переменной среды. Создать переменную среды


Управляем переменными среды | Windows IT Pro/RE

Немного о среде

Переменные среды хранят информацию об особенностях установки, например имя системы (computername), особенности архитектуры операционной системы, 32- или 64-разрядная система (processor_architecture), а также путь поиска, где находятся исполняемые программы (path). Переменные среды можно разделить на три категории: зависящие только от операционной системы (например, только что упомянутые computername, processor_architecture, path), переменные, используемые приложениями независимых поставщиков (в частности, на моей системе QuickTime создает переменную QTJAVA), а также переменные, которые используют командные файлы Windows.

Простота языка программирования не имеет значения (командный язык Windows относится к самым простым), он необходим программистам для получения внутренних данных. Здесь главную роль играют переменные среды. Однако для получения информации о переменных среды нужен инструмент, и таким инструментом является команда Set.

Вот тут читатель воскликнет: «Кто же не знает команды Set!» А на самом деле, знаете ли вы, что эта команда может выполнять арифметические действия, операции с любой частью строковой переменной в существующих переменных среды? Что она упрощает ввод и может генерировать случайные числа? Эти и другие операции можно выполнять с помощью команды Set. Далее я расскажу о двух возможностях, которые предоставляет команда Set.

Генерация случайных чисел

Рассмотрим простой командный файл guessnumber.cmd (листинг 1). Скопируем этот текст в Notepad, сохраним в некоторой папке и назовем его guessnumber.cmd. Теперь открываем командное окно, вводим guessnumber, нажимаем Enter и следуем приглашениям программы. Это простая игра нестрогих рассуждений с использованием догадок, в процессе командный файл выбирает случайное число, запрашивает ответ, какое это число, сообщает, правильный ответ или нет, дает подсказку, больше или меньше ответ, чем загаданное число, и, если число не угадано, повторяет процесс. Игра, может быть, не самая интересная, но она есть в Windows Server 2008 Server Core.

Рассмотрим строку, которая выбирает случайное число для отгадывания:

set gamevalue=%random%

Главное место в этом коде занимает функция %random% (встроена в командный процессор Windows начиная с Windows 2000 Server), которая генерирует случайные числа в диапазоне от 0 до 32767.

После генерации случайного числа система должна повторить пользователю вопрос для угадывания. До Windows 2000 командные файлы не предлагали полезного способа для запроса ввода (как известно тем, кто пытался задействовать команду Choice). Начиная с Windows 2000 команда Set получила возможность ввода через ключ /p, как видно в следующем операторе:

set/p latestguess=What do you think it is?

Эта команда в общем виде выглядит так:

set/p environmentvariablename= [prompttext]

Здесь видно, что приглашением является вопрос «What do you think it is?». Отмечу, что пробел после вопросительного знака служит для лучшего форматирования. Все, что будет введено в переменную среды, получит название latestguess.

Выполнение арифметических действий

Я отметил выше, что задан диапазон значений (максимальное целое число равно 32768). Изменим правила игры, ограничив пользователя числом попыток не более 16. Необходимо выполнение арифметических действий, чтобы подсчитывать, сколько было предпринято попыток. Результат измененной версии guessnumber отражен в листинге 2. Рассмотрим код guessnumber2.cmd. Видно, что два командных файла имеют различия только в нескольких строках, которые вводят новую переменную среды guessesleft. Я ввел эту переменную, которую помнят все, кто работал с любой операционной системой Microsoft начиная с DOS 2.0:

set guessesleft=16

В этом операторе появляются новые арифметические возможности команды:

set/a guessesleft=%guessesleft%-1

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

Надеюсь, эти примеры добавят аргументов, чтобы вернуться к проверенному помощнику — команде Set, возможности которой недооценены.

В тех же случаях, когда не удается достичь желаемой цели с помощью Set, можно задействовать ее усовершенствованную версию — команду Setx.

Для многих пакетных файлов, использующих переменную среды, ее значение устанавливается путем запроса ввода данных пользователем (с помощью переключателя/p, как было показано ранее), либо с помощью простой команды Set:

set myname=Mark

Эта команда работает отлично, но иногда возникает необходимость ввести в переменную среды другие виды информации — в частности, результат выполнения команды (например, время на передачу и подтверждение приема сигнала проверки связи по Ping) или значение параметра реестра.

Уже по меньшей мере в течение 10 лет это позволяет делать инструмент из Resource Kit под названием Setx, который в Windows Vista и более новых версиях уже входит в состав операционной системы. Как будет показано далее, поведение Setx может оказаться несколько нестандартным, но этот инструмент способен составить основу для разработки некоторых мощных пакетных файлов.

Предположим, например, что нам требуется извлечь значение параметра реестра и поместить его в переменную среды. Нужно найти имя организации, на которое зарегистрирована данная копия Windows — для отчета, либо для проверки правильности имени, указанного в реестре. Windows хранит эту информацию в параметре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\RegisteredOrganization. Приведенная ниже команда

setx regorg/k "HKLM\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\RegisteredOrganization"

позволяет извлечь его значение и поместить в переменную среды.

С помощью Setx можно извлекать данные не только из реестра, но и из других источников. В нашем случае параметр /k направляет поиск в реестр.

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

Extracted value: "MR&D". SUCCESS: Specified value was saved.

Для Setx не предусмотрен параметр для подавления столь многословного ответа, однако появление на экране лишней информации можно блокировать, перенаправив выход на устройство nul:

setx regorg/k “HKLM\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\RegisteredOrganization” >nul

Итак, в системе появилась переменная среды regorg. Теперь вспомним об упомянутой ранее «странности поведения». По причинам, известным лишь разработчикам Setx, эта команда создает переменную среды и наполняет ее содержимым, но не передает соответствующую информацию той ее копии, которая находится в текущем окне командной строки. Поэтому любая команда, вводимая в окне командной строки, где была введена команда Setx, не сможет увидеть значение, только что созданное для переменной среды. Например, в ответ на ввод set regorg будет выдано сообщение об ошибке: Environment variable regorg not defined («Переменная среды regorg не определена»). Чтобы увидеть новую переменную среды, необходимо открыть второе окно командной строки и ввести там нужную команду.

Тот, кто работает с переменными среды, знает, что одни переменные Windows хранит в профиле системы, другие — в профиле пользователя. В ответ на ввод в командной строке команды set выдаются как системные переменные среды, так и переменные среды из профиля пользователя, без указания их источника. Насколько мне известно, не существует способа применения команды Set, позволяющего вывести только системные переменные среды, либо только переменные среды, относящиеся к пользователю. Однако разницу можно увидеть, если щелкнуть кнопку «Переменные среды» на вкладке «Дополнительно» на странице «Свойства системы» элемента «Компьютер». Параметр /m команды Setx позволяет обеспечить большую степень контроля над создаваемыми переменными среды. Когда используется этот параметр, новая переменная среды сохраняется в профиле системы, а не в профиле пользователя.

Команда Setx может оказаться полезной при углубленной разработке пакетных файлов. В следующих статьях рубрики мы рассмотрим и другие возможности этой команды.

Марк Минаси ([email protected]) — редактор Windows IT Pro, MCSE и автор книги Mastering Windows Server 2003 (издательство Sybex)

www.osp.ru

Настройка элемента переменной среды

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

Создание элемента переменных среды

Чтобы создать новый элемент предпочтений переменных среды
  1. Откройте Консоль управления групповыми политиками. Щелкните правой кнопкой объект групповой политики, который должен содержать новый элемент настройки, и щелкните Изменить.

  2. В дереве консоли в разделе Конфигурация компьютера или Конфигурация пользователя разверните папку Настройки, а затем — папку Конфигурация Windows.

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

  4. В диалоговом окне Свойства: Новая переменная среды выберите Действие, чтобы разрешить выполнение групповой политики. (Для получения дополнительных сведений см. «Действия» в этом разделе.)

  5. Укажите в параметрах переменной среды, настроить или удалить групповую политику. (Для получения дополнительных сведений см. «Параметры переменных среды» в этом разделе.)

  6. Откройте вкладку Общие, настройте параметры и введите комментарии в поле Описание. (Дополнительные сведения см. в разделе Настройка общих параметров.)

  7. Нажмите кнопку ОК. Новый элемент настройки появится в области сведений.

Действия

Элемент настройки этого типа позволяет выполнять четыре действия: Создать, Заменить, Обновить и Удалить. Поведение элемента предпочтений зависит от выбранного действия и от того, существует ли уже переменная среды.

Создать

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

Удалить

Удаление переменной среды или удаление разделенного точкой с запятой сегмента из переменной PATH для компьютеров или пользователей.

Заменить

Удаление и повторное создание переменной среды. Конечным результатом действия Заменить будет перезапись всех существующих параметров, связанных с переменной среды. Применение этого действия к сегменту переменной PATH не имеет практического эффекта; в этом сегменте возможно только изменение регистра текста. Если переменная среды не существует, действие Заменить создает новую переменную среды.

Обновить

Изменение параметров существующей переменной среды. Это действие отличается от действия Заменить, так как только обновляет параметры, заданные в элементе предпочтений. Все остальные параметры переменной среды не изменяются. Применение этого действия к сегменту переменной PATH не имеет практического эффекта; в этом сегменте возможно только изменение регистра текста. Если переменная среды не существует, действие Обновить создает новую переменную среды.

Параметры переменной среды

Пользовательская переменная

Выберите этот параметр для элемента предпочтений среды в группе Конфигурация пользователя, чтобы влияние переменной среды было для каждого пользователя независимым. Переменная среды хранится в разделе реестра HKEY_CURRENT_USER.

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

Системная переменная

Выберите этот параметр, чтобы переменная среды влияла на всех пользователей данного компьютера. Переменная среды хранится в разделе реестра HKEY_LOCAL_MACHINE.

Имя

Введите имя переменной среды, к которой применяется действие. Чтобы выбрать переменную PATH, оставьте это поле пустым.

Путь

Установите этот флажок, чтобы создать или заменить значение переменной PATH или добавить или удалить разделенный точкой с запятой сегмент значения переменной PATH. Этот параметр доступен, только если выбран параметр Системная переменная.

Частичная

Установите этот флажок, чтобы добавить или удалить разделенный точкой с запятой сегмент значения переменной PATH. Этот параметр доступен, только если выбраны параметры Системная переменная и Путь.

Параметр

Введите значение переменной среды. В это поле можно вводить переменные.

Если выбран параметр Путь, введите список путей к папкам, с разделением точкой с запятой, чтобы операционная система Windows нашла файлы.

Если выбран параметр Частичная, введите один сегмент переменной PATH (без точки с запятой).

Дополнительные сведения
  • Если необходимо ограничить область для нескольких элементов настройки с помощью сложного набора целевых элементов, можно упростить конфигурацию, использовав переменную среды. Например, создайте элемент настройки "Переменная среды", который создаст переменную среды со значением "1", после чего примените к ней целевые элементы. Чтобы применить тот же набор целевых элементов к другим элементам настройки, добавьте целевой элемент "Переменная среды" к этим элементам настройки и настройте для них требование значения "1" у переменной, созданной при помощи элемента настройки "Переменная среды".
  • Изменить область элементов настройки можно на уровне целевых элементов.
  • Элементы настройки доступны только для объектов групповой политики доменного уровня.
Дополнительные ссылки

winintro.ru

Объект WScript.Shell свойство Environment - Переменные окружения Windows

Всем доброго дня, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим работу с переменными окружения Windows, а именно: теоретические основы и программный код для написания сценариев.

Переменные окружения Windows – теоретические основы

Переменные среды – Это по своей природе простые текстовые строки, которые позволяют хранить системную или пользовательскую информацию. Оны нужны, что бы быстро получить доступ к нужному ресурсу в операционной системе windows или системному значению. Все среды разделяют на два типа:

  • Системные – Данный тип создается автоматически операционной системой, они доступны для всех пользователей. Информация хранится в реестре, в большинстве случаев, что бы изменения вступили в силу, нужно произвести перезапуск операционной системы.
  • Пользовательские – Данный тип создается конкретным пользователей, поэтому информация доступна в большинстве случаев только для того пользователя, которые ее записал. В отличии от системных сред, пользовательские переменные окружения ОС Windows вступают сразу в силу, однако, нужно перезапустить те приложения, которые будут их использовать.

Доступ к средам в Windows XP осуществляется через значок "мой компьютер": нажимаем правой кнопкой мыши по значку и из контекстного меню выбираем пункт "Свойства", далее переходим на вкладку "Дополнительно" и там нажимаем на кнопку "переменные_среды". Частично, работу с переменными окружения Windows я рассмотрел в статье "Урок 4 по CMD - переменные окружения".

Переменные среды Windows – практическая часть

Хорошо, теперь давайте перейдем непосредственно к основной части статьи. Мы рассмотрим объект WScript.Shell, его свойство Environment позволяет работать с переменными окружения Windows:

Environment([strType]) – По умолчанию, данное свойство предоставляет доступ ко всем переменным окружения Windows типа System, но можно задать и другой тип, их всего четыре:

  • "System" – системные переменные_среды, создаются самой операционной системой Windows.
  • "User" – переменные_среды пользователя.
  • "Volatile" – временные_переменные.
  • "Process" – переменные_среды текущего командного окна.

И так, переменная среда Windows, это переменная, которая хранится в самой системе, она может быть временной, системной или, может быть создана пользователем. Так, благодаря переменным окружения Windows мы можем через меню Пуск/Выполнить запускать командную строку или калькулятор (все то, что лежит в системных каталогах) не вводя полного пути. Также, Windows переменные окружения хранят информацию о процессоре, профиле пользователя и многое другое.

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

'********************************************* ' wscript_shell_environment ' Переменные среды Windows ' environment.vbs '********************************************** Option Explicit   dim WshShell, index dim WshEnvirSys, WshEnvirUsr, WshEnvirVol, WshEnvirProc dim s, u, v, p s = "" v = "" u = "" p = ""   ' формируем ссылку на объект set WshShell = WScript.CreateObject("WScript.Shell")   ' тип SYSTEM set WshEnvirSys = WshShell.Environment ' тип USER set WshEnvirUsr = WshShell.Environment("USER") ' тип VOLATILE set WshEnvirVol = WshShell.Environment("VOLATILE") ' тип PROCESS set WshEnvirProc = WshShell.Environment("PROCESS")   For Each index In WshEnvirSys s = s & index & vbCrLf Next   For Each index In WshEnvirUsr u = u & index & vbCrLf Next   For Each index In WshEnvirVol v = v & index & vbCrLf Next   For Each index In WshEnvirProc p = p & index & vbCrLf Next   MsgBox "Системные:" & vbCrLf & vbCrLf& s MsgBox "Пользовательские:" & vbCrLf & vbCrLf & u MsgBox "Временные:" & vbCrLf & vbCrLf & v MsgBox "Текущий процесс:" & vbCrLf & vbCrLf & p

Видим, что WshShell хранит ссылку на объект WScript.Shell, WshEnvirSys хранит ссылку на коллекцию переменных окружения Windows типа SYSTEM, WshEnvirUsr – USER, WshEnvirVol – VOLATILE и WshEnvirProc – PROCESS. Видим, что при создании ссылки на объект или коллекцию в языке vbscript используется ключевое слово set. Далее мы используем цикл For Each для перебора элементов коллекции и формирования списка. Списки выводятся в конце сценария с помощью функции MsgBox.

А вот аналогичный пример, но уже на языке jscript:

//********************************************* // wscript_shell_environment // Переменные среды Windows // environment.js //**********************************************   var WshShell2; var WshEnvirSys, WshEnvirUsr1, WshEnvirVol, WshEnvirProc; var s="", u="", v="", p="";   // формируем ссылку на объект WshShell2 = WScript.CreateObject("WScript.Shell")   // тип SYSTEM WshEnvirSys = new Enumerator(WshShell2.Environment("SYSTEM")); // тип USER WshEnvirUsr1 = new Enumerator(WshShell2.Environment("USER")); // тип VOLATILE WshEnvirVol = new Enumerator(WshShell2.Environment("VOLATILE")); // тип PROCESS WshEnvirProc = new Enumerator(WshShell2.Environment("PROCESS"));   for (; !WshEnvirSys.atEnd(); WshEnvirSys.moveNext()) s+=WshEnvirSys.item()+"\n"; for (; !WshEnvirUsr1.atEnd(); WshEnvirUsr1.moveNext()) u+=WshEnvirUsr1.item()+"\n"; for (; !WshEnvirVol.atEnd(); WshEnvirVol.moveNext()) v+=WshEnvirVol.item()+"\n"; for (; !WshEnvirProc.atEnd(); WshEnvirProc.moveNext()) p+=WshEnvirProc.item()+"\n";   WScript.Echo ( "Системные:\n\n" + s); WScript.Echo ( "Пользовательские:\n\n" + u); WScript.Echo ( "Временные:\n\n" + v); WScript.Echo ( "Текущий процесс:\n\n" + p);

Хорошо, у коллекции wscript shell environment есть свойство length, которое хранит в себе число всех элементов, метод Remove(strName) позволяет удалить переменную окружения ОС Windows, которая задана строковым параметром strName.

Хорошо, давайте рассмотрим следующий пример на языке vbscript:

'********************************************* ' wscript_shell_environment ' Переменные окружения ОС Windows ' environment_1.vbs '********************************************** Option Explicit   dim WshShell1, index, u dim WshEnvirUsr, WshEnvirProc   ' формируем ссылку на объект set WshShell1 = WScript.CreateObject("WScript.Shell") set WshEnvirUsr = WshShell1.Environment("USER")   u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf   For Each index In WshEnvirUsr u = u & index & vbCrLf Next   MsgBox u   '************************************************************************ ' Создаем переменную_окружения с именем my_usr_var ' и значением "простой текст" '************************************************************************ WshEnvirUsr("my_usr_var") = "простой текст" u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf   For Each index In WshEnvirUsr u = u & index & vbCrLf Next   MsgBox u   '*********************************** ' Удаляем my_usr_var '*********************************** WshEnvirUsr.Remove("my_usr_var")   u = "Количество: " & vbTab & WshEnvirUsr.Length & vbCrLf & vbCrLf   For Each index In WshEnvirUsr u = u & index & vbCrLf Next   MsgBox u

В этом примере по wscript shell environment свойству мы создали собственную переменную среду my_usr_var, записав в нее текстовую строку. Перед этим, мы вывели общее количество всех сред.

Скачать архив с примерами

А вот аналогичный пример на языке jscript:

//********************************************* // wscript_shell_environment // Переменные окружения ОС Windows // environment_1.js //**********************************************   var WshShell1, u var WshEnvirUsr2, WshEnvirProc   // формируем ссылку на объект WshShell1 = WScript.CreateObject("WScript.Shell");   WshEnvirUsr2 = WshShell1.Environment("USER"); WshEnum = new Enumerator (WshEnvirUsr2);   u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";   for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n";   WScript.Echo (u);   //************************************************************************ // Создаем переменную_окружения с именем my_usr_var // и значением "простой текст" //************************************************************************   WshEnvirUsr2("my_usr_var_1") = "простой текст"; WshEnum = new Enumerator (WshEnvirUsr2); u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";   for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n";   WScript.Echo (u);   //*********************************** // Удаляем my_usr_var //*********************************** WshEnvirUsr2.Remove("my_usr_var_1"); WshEnum = new Enumerator (WshEnvirUsr2); u = "Количество:\t" + WshEnvirUsr2.Length + "\n\n";   for (; !WshEnum.atEnd(); WshEnum.moveNext()) u+=WshEnum.item()+"\n";   WScript.Echo (u);

И так, в этой статье мы рассмотрели работу со свойством Environment класса WScript.Shell. Подписывайтесь на обновление блога, что бы быть в курсе новых материалов.

scriptcoding.ru

Переменные среды Linux - Personal Gleb's wiki

**Добавление переменной локальному пользователю"

nano ~/.bashrc JAVA_HOME="/usr" export JAVA_HOME

создаст переменную в терминале<переменная>="<значение>"

Сделать переменную средыexport <переменная>export <переменная>="<значение>"локальна для терминала, храниться только на время сессии

Использовать переменные среды$<переменная>

Удалить переменную средыunset <переменная>

Создать переменную среды для одного пользователязаписать создание глобальной переменной в файл:/home/<user>/.profile - переменные/home/<user>/.bashrc - алиасы

Создать глобальную переменную средыдобавляем в файл /etc/bash.bashrc

Вывести все переменные средыenv

Добавление переменных окружения в Linux

1) Создаем исполняемый файл в /etc/profile.d:

sudo touch /etc/profile.d/myenv.sh sudo chmod +x /etc/profile.d/myenv.sh 2) Добавляем в него команды установки необходимых переменных окружения: MYENV1=myvar1 MYENV2=myvar2 export MYENV1 MYENV2 3) Сохраняем, перезаходим в систему. Всё, переменные окружения доступны:

Существует несколько вариантов добавления переменной окружения в Linux, но этот вариант хорош тем, что:Устанавливает переменную окружения для всех пользователейУстановка переменной окружения не слетает после обновления /etc/profile при обновлении системыЗЫ Не знаю, насколько он подходит для дистрибутивов, отличных от Ubuntu. В некоторых дистрибутивах, вместо создания файлов в /etc/profile.d/ нужно использовать файл /etc/profile.local.

Для оболочки bash:Отредактировать файл запуска(~/ .bashrc)Измените переменную PATH:PATH="$PATH":/usr/local/jdk1.6.0/binexport PATHСохранить изменения и закрыть окноОткрыть новое окно терминалаПроверить, правильно ли задана переменная PATH% java -version

Для оболочки C Shell (csh):Отредактировать файл запуска (~/ .cshrc)Задайте путьset path="$PATH":/usr/local/jdk1.6.0/binСохранить изменения и закрыть окноОткрыть новое окно терминалаПроверить, правильно ли задана переменная PATH% java -version

wiki.n5g.ru