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

Я использую файл .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. В остальном все автоматизировано.


person Samaursa    schedule 10.07.2011    source источник


Ответы (2)


%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. Launch Notepad from the shell, so you can try and open a file name %MYTEST%
    • Try it with the %, it works
    • Обратите внимание, как был изменен текущий каталог, кстати.
  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%
person ixe013    schedule 29.07.2011

учтите, вы хотите настроить 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 ....
person Ashwin Hegde    schedule 30.05.2013