通过批处理文件为系统设置环境变量

3
我正在使用一个 .bat 文件来自动化我的引擎中的一些任务(一旦它从存储库中被克隆)。其中一个任务是设置环境变量。我正在使用 SETX 命令,并将命名变量的路径设置为 %CD%,即安装程序运行的目录。
这很有效,虽然用户需要进行 注销/登录,可能有点烦人。如果将变量设置为系统变量,则不需要进行此 注销/登录 循环(我不确定为什么,但重新启动 Visual Studio 对用户环境变量没有影响...也就是说,它检测不到更改,但会检测到系统变量的更改)。因此,我继续使用了 -m 命令。不幸的是,这需要批处理文件具有管理员权限。没问题,我以管理员身份运行了批处理文件。好吧,现在我遇到了一个问题。当前目录变量 %CD% 从安装程序运行的目录更改为 C:\Windows\System32
那么现在问题来了。如何通过使用 %CD% 的批处理文件设置系统环境变量,而不使其默认为 C:\Windows\System32。只是作为一个注意事项,相当多的人使用安装程序,我希望这个过程尽可能地轻松和无误。这意味着,最好不要手动输入。目前,如果没有管理员权限和没有 -m,唯一需要的就是进行 注销/登录 循环。否则,一切都是自动化的。
2个回答

5

%0 是你批处理文件的名称。你可以使用 pushd 和 %~dp0 来切换到你的批处理文件所在的目录,并从那里进入任何目录。因此,这种批处理文件的一般结构如下:

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

关于您的Visual Studio问题... 用户模式环境变量在设置后对每个启动的进程都可用。但由于某种原因,当前进程没有接收到它。但是Explorer.exe(处理开始菜单和运行命令的程序)似乎每次需要时都会获取新的环境副本。
以这种方式启动的进程将具有新环境,而从命令行启动的进程将继承旧环境,没有被setx设置的新变量。
您可以通过更改批处理文件来解决此问题,以同时使用set和setx设置变量。
以下是一些代码供您参考。 它将:
  1. 显示当前工作目录
  2. 更改脚本所在的目录
  3. 在运行它的shell中设置变量MYTEST
  4. 在用户的环境中设置变量
  5. 从shell启动记事本,以便您尝试打开一个名为% MYTEST%的文件
    • 使用%尝试它,它有效
    • 顺便注意当前目录已更改。
  6. 要求您手动从开始菜单启动记事本
以下是代码,希望对您有所帮助。
@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

假设你想使用bat脚本设置ant,请按照以下步骤进行:

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 ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接