簡體   English   中英

批處理腳本讀取文件並設置為環境變量

[英]Batch script read file and set to environment variable

我正在編寫一個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.dat具有JAVA_HOME=c:\\JDK1.6JAVA=c:\\JDK1.6\\bin\\java運行以上代碼不會設置這些變量,即使set %%Ido set %%I語句。 這兩個echo語句不打印任何內容。 我在這里想念什么? 為什么從文件讀取的行未設置到環境中?

這確實在這里工作:

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

包含在字符中的環境變量是在分析代碼行時而不是在執行代碼時評估的。 如果您希望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%

法案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM