12

Javaランチャーであるバッチスクリプトで後で使用するために、バッチファイルから変数を読み取ろうとしています。理想的には、すべてのプラットフォーム (Unix、Windows) で設定ファイルを同じ形式にし、有効な Java プロパティ ファイルにしたいと考えています。つまり、次のようになります。

setting1=Value1
setting2=Value2
...

Unix シェル スクリプトのように、そのような値を読み取ることは可能ですか? は次のようになります。

READ settingsfile.xy
java -Dsetting1=%setting1% ...

でこれがおそらく可能であることはわかっていSET setting1=Value1ますが、すべてのプラットフォームで設定に同じファイル形式を使用することをお勧めします。

明確にするために:-Xmxや-classpathなど、JVM内から変更できないパラメーターも設定する必要があるため、コマンドライン/バッチ環境でこれを行う必要があります。

4

5 に答える 5

31

これは、次のようにバッチ ファイルで実行できます。

setlocal
FOR /F "tokens=*" %%i in ('type Settings.txt') do SET %%i
java -Dsetting1=%setting1% ...
endlocal

これは、「SETTING1=VALUE1」のような文字列を含むテキスト ファイルを読み取り、SET を呼び出してそれらを環境変数として設定します。

setlocal/endlocal は、環境変数のスコープをバッチ ファイルの実行に制限するために使用されます。

CMD コマンド プロセッサは実際には非常に強力ですが、かなりビザンチンな構文を使用しています。

于 2008-10-24T08:17:30.453 に答える
2

プロパティ ファイルをパラメーターとして Java プログラムに渡すことができます (後でメイン プログラムを起動する場合があります)。そして、マルチ プラットフォーム パラダイムの恩恵を受けます。

于 2008-10-24T07:56:35.223 に答える
1

プロパティファイル(事前に知っている変数)から特定の変数のみをインポートするのが賢明かもしれません。その場合、次のような関数をお勧めします。

:parsePropertiesFile
    set PROPS_FILE=%1
    shift
    :propLoop
    if "%1"=="" goto:eof
    FOR /F "tokens=*" %%i in ('type %PROPS_FILE% ^| findStr.exe "%1="') do SET %%i
    shift
    GOTO propLoop
goto:eof

これはcall:parsePropertiesFile props.properties setting1 setting2、変数setting1とsetting2を設定するために呼び出されます

于 2011-06-01T16:23:13.430 に答える
0

Java プログラム内から OS の環境変数にアクセスすることもできます。

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}
于 2008-10-24T22:55:52.507 に答える