2011-07-10 45 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

這可能會幫助你。 –

相關問題