2011-07-10 143 views
3

我使用.bat文件为我的引擎自动执行一些任务(一旦它从存储库中新鲜克隆)。其中一项任务是设置环境变量。我正在使用SETX命令,并将命名变量的路径设置为%CD%,即安装程序的运行目录。通过批处理文件为系统设置环境变量

这很好,虽然用户需要log-off/log-on这可能很烦人。如果将变量设置为系统变量,则此循环不是必需的(我不确定为什么,但重新启动Visual Studio对用户环境变量没有影响...也就是说,它检测不到更改,但它会检测系统变量中的更改)。所以我开始使用-m命令。不幸的是,这要求批处理文件具有管理权限。不是问题;我以管理员身份运行该批处理文件。那么,现在我遇到了一个问题。当前目录变量%CD%已从安装程序的运行目录更改为C:\Windows\System32

所以现在到问题。 如何通过使用%CD%的批处理文件设置系统环境变量,而不通过C:\Windows\System32。就像一个笔记,不少人使用安装程序,我希望这个过程尽可能无痛苦,没有错误。这意味着,不需要手动输入。目前,如果在没有管理员权限且没有-m的情况下运行,唯一需要的是周期为log-off/log-on。否则,一切都是自动的。

回答

5

%0是您的批处理文件的名称。您可以使用%〜dp0与pushd来切换到您的批处理文件所在的目录,并从那里工作到任何目录。所以,这样的批处理文件的一般结构为:

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

至于你的Visual Studio的问题...用户模式环境变量可用于环境变量的设置后,每个进程开始。但由于某种原因,目前的流程没有收到它。但Explorer.exe(处理启动菜单和运行命令的人似乎在每次需要它时都会获取环境的新副本)。

以这种方式启动的进程将具有新环境,而启动的进程命令行会继承旧的环境,而不会被setx设置新的变数。

您可以通过更改您的批处理文件既setsetx变量缓解这一问题。

下面是一些代码,让你开始吧

  1. 显示当前的工作目录
  2. 更改其中的脚本所在
  3. 设置变量MYTEST在它的运行
  4. 从shell设置变量在用户的环境
  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

考虑,您使用的是蝙蝠脚本要设置蚂蚁请执行以下操作:

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

这可能会帮助你。 –

相关问题