私は単純なバッチ ファイル ("javapath.bat") を作成して、必要なときに Java コンパイラをパスに追加して、常にパスに存在しないようにしようとしています。@call javapath.bat
また、必要に応じてパスを自動的に追加できるように、他のビルド スクリプトと同様のことができるようにしたいと考えています。これらは edit-save-compile-run グラインド中に繰り返し実行されるため、javapath.bat は Java がすでにパス上にあるかどうかを確認する必要があり、そうである場合は readd しない必要があることを意味します。パス変数にばかげた重複がたくさんあるようにします。
したがって、追加する必要があるかどうかを検出するためsetlocal
に、「コマンド拡張機能」を有効にして、環境変数の文字列置換を使用できるようにします。その醜さはうまく機能します。
次にendlocal
、スクリプトの最後で変更を元に戻すことなく、実際に環境変数を設定できるようにします。それはうまくいきません。または、変数の変更が元に戻されるのを確実に停止しますが、それは正常ではありません。ローカルでは完全に表示されなくなりますが、その後も引き続き表示されます。
@echo off
setlocal enableextensions
if "%path:jdk1=%"=="%path%" (
endlocal
set ANT_HOME=C:\Program Files\Java\ant
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_07
path %ANT_HOME%\bin;%path%
path %JAVA_HOME%\bin;%path%
)
以上で、ANT_HOME と JAVA_HOME が正しく設定されました。しかし、PATH への変更は「\bin;」だけです。これは、スクリプト中に設定された変数が後で表示されるように見えるためです (したがって、ANT_HOME と JAVA_HOME は空白であり、PATH への最初の変更は忘れられます)。したがって、2 回実行するとJava がパスに追加されますが、Ant は追加されません。パスを 2 回ハードコードすることもできましたが、この動作は非常に奇妙でばかげており、1 時間もこのままでした。
編集:追加enabledelayedexpansion
しても効果はありませんでした。