13

Что я должен сделать:

  • Добавьте папку к переменной среды %PATH% на уровне SYSTEM.
  • Сделайте изменение постоянным.

Как мне нужно это сделать:

  • Использование командной строки или другой метод, с помощью которого все необходимые команды могут быть записаны в .BAT файл.
  • Использование только инструментов, которые были бы доступны на чистой установке Windows XP SP3, без подключения к Интернету.
  • Я бы предпочел запустить скрипт локально, но у меня также есть удаленный доступ к целевым системам. Имейте в виду, однако, что я не могу предположить, что какие-либо службы не по умолчанию (например, удаленный реестр) включены в системах.

Системы, на которых скрипт должен работать:

  • Windows XP SP3
  • Windows Server 2003 с пакетом обновления 2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

Я довольно знаком с командой SET , но я также знаю, что она обычно перезаписывает существующую переменную вместо добавления к ней. Это не приемлемо. Есть ли другой инструмент (или опция для SET , о которой я не знаю), который вместо этого добавит переменную? Или мне нужно добавить обходной путь в сценарий, который включает временное копирование существующей переменной в другую переменную или текстовый файл?

Кроме того, я понимаю, что SET не будет постоянно изменять переменную. Я видел упоминание о SETX , но, похоже, он не встроен в Windows XP SP3 (или, по крайней мере, он недоступен в системе, над которой я работаю). Есть ли другой способ сделать изменение постоянным, через редактирование реестра или что-то еще?

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

2 ответа2

4

Следующее добавляет C:\bin к вашему пути, а затем сохраняет новый путь в Реестре:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

Я проверял это только на XP SP3, но он должен работать и на более новой версии.

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

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

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)
-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .