2013-03-18 111 views
0

我正在編寫一個shell腳本來讀取包含key = value對的文件並將這些變量設置爲環境變量。我試着用下面的代碼,批處理腳本讀取文件並設置爲環境變量

if EXIST "test.dat" (
    for /F "tokens=*" %%I in (test.dat) do @set %%I 
    echo setting JAVA_HOME to :: %JAVA_HOME% 
    echo setting JAVA to %JAVA% 
) 

假設test.datJAVA_HOME=c:\JDK1.6JAVA=c:\JDK1.6\bin\java 運行上面的代碼不設置這些變量,即使我有doset %%I聲明。兩個回聲語句不打印任何東西。我在這裏錯過了什麼?爲什麼從文件中讀取的行沒有設置到環境中?

+0

相同延遲擴展,當您試圖http://stackoverflow.com/questions/15479542/batch-script-set-command-not-working-properly – 2013-03-18 16:22:33

回答

0

這並不在這裏工作:

if exist test.dat for /f "delims=" %%i in (test.dat) do set %%i 
set java 

輸出:

JAVA=c:\JDK1.6\bin\java 
JAVA_HOME=c:\JDK1.6 
0

%的範圍內封閉的環境變量時的代碼行是解析字符進行評估,當它不是執行。如果您希望cmd在執行代碼行時評估環境變量,則需要啓用'延遲變量擴展'並將環境變量名稱放在之內!而不是。例如:

... 
setlocal enableextensions enabledelayedexpansion 
... 
if EXIST "test.txt" (
    for /F "tokens=*" %%I in (%SEURAT_SERVER_DIR%\server-variables.dat) do @set %%I 
    echo setting JAVA_HOME to :: !JAVA_HOME! 
    echo setting JAVA to !JAVA! 
) 
echo JAVA_HOME=%JAVA_HOME% 
echo JAVA=%JAVA% 

比爾

變量問題
相關問題