0

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て いないと仮定します。2 つの echo ステートメントは何も出力していません。ここで何が欠けていますか? ファイルから読み取られた行が環境に設定されていないのはなぜですか?JAVA_HOME=c:\JDK1.6JAVA=c:\JDK1.6\bin\javaset %%Ido

4

2 に答える 2

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%

明細書

于 2013-03-18T16:19:38.060 に答える
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
于 2013-03-18T16:12:36.533 に答える