Установка переменных среды для системы через командный файл - PullRequest
3 голосов
/ 10 июля 2011

Я использую файл .bat для автоматизации некоторых задач для своего движка (после его клонирования из репозитория). Одной из задач является установка переменных среды. Я использую команду SETX и задаю путь указанной переменной равным %CD%, то есть каталог, из которого запускался установщик.

Это хорошо работает, хотя пользователю нужно log-off/log-on, что может раздражать. Этот цикл log-off/log-on не требуется, если переменная установлена ​​как системная переменная (я не уверен, почему, но перезапуск Visual Studio не влияет на переменные среды пользователя ... то есть он не обнаруживает изменений, но обнаруживает изменения системные переменные). Поэтому я приступил к использованию команды -m. К сожалению, для этого требуется, чтобы командный файл имел права администратора. Не проблема; Я запускал командный файл как администратор. Ну, сейчас Я столкнулся с проблемой. Текущая переменная каталога %CD% изменилась с каталога, из которого запускался установщик, на C:\Windows\System32.

Так что теперь на вопрос. Как установить системные переменные среды через командный файл, который использует %CD% без значения по умолчанию C:\Windows\System32. В качестве примечания, довольно мало людей используют установщик, и я хотел бы, чтобы этот процесс был максимально безболезненным и безошибочным. Это означает, что ввод вручную не является предпочтительным. В настоящее время, если он запускается без прав администратора и без -m, необходим только цикл log-off/log-on. В противном случае все автоматизировано.

Ответы [ 2 ]

5 голосов
/ 30 июля 2011

%0 - это имя вашего командного файла. Вы можете использовать% ~ dp0 с pushd, чтобы перейти в каталог, в котором находится ваш пакетный файл, и перейти к любому каталогу оттуда. Таким образом, общая структура такого пакетного файла:

@echo off
pushd %~dp0
rem batch file commands go here
popd

Что касается вашей проблемы с Visual Studio ... Переменные среды пользовательского режима доступны для каждого процесса, запущенного после установки переменной среды. Но по какой-то причине текущий процесс не получает его. Но Explorer.exe (который обрабатывает это меню «Пуск» и команду «Пуск», похоже, извлекает новую копию окружения каждый раз, когда это необходимо.

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

Вы можете решить эту проблему, изменив пакетный файл на set и setx переменные.

Вот код, с которого можно начать. Это будет

  1. Показать текущий рабочий каталог
  2. Изменить каталог, в котором находится скрипт
  3. Установить переменную MYTEST в оболочке, в которой она запущена
  4. Установить переменную в среде пользователя
  5. Запустите Блокнот из оболочки, чтобы вы могли попробовать открыть файл с именем% MYTEST%
    • Попробуйте с%, все работает
    • Обратите внимание, как был изменен текущий каталог, кстати.
  6. Попросить запустить блокнот вручную из меню «Пуск»

Вот код, HTH

@echo off

::This is where we start
echo Current directory is %CD%
echo %0

::We change the current directory to where the script is running
pushd %~dp0

echo Current directory is %CD%

::if you want, you can move relatively from it
cd..

::Set an environement variable
set MYTEST=%~f0
::Make a copy avaiable to other processes
setx MYTEST "%MYTEST%"

::Now I should be able to fire notepad and open %%MYTEST%% 
::(you can use the %% sign in the open box)
::Let's start a copy from this process
::
echo Starting notepad, open the file %%MYTEST%%, you should this 
echo file thanks to the set statement.
notepad
echo Now launch Notepad from the start menu and open the file %%MYTEST%%, 
echo you should this file thanks to the setx statement.

::Wherever you end up, restore the current directory
popd

echo Current directory is %CD%
0 голосов
/ 30 мая 2013

учтите, что вы хотите настроить ant с помощью сценария bat, сделайте следующее:

echo off 
echo SETTING UP ANT FOR THE BUILD ....
set ANT_HOME=%~dp0%build\apache-ant-1.8.2
set ANT_BIN=%~dp0%build\apache-ant-1.8.2\bin

SET path=%path%;%ANT_BIN%;%ANT_BIN%;

echo PATH: %path%
echo ANT_HOME: %ANT_HOME%
echo ANT_BIN: %ANT_BIN%
echo ANT GOT INSTALLED ....
...