4

win32 シェル スクリプトでシステム パス変数を更新しようとしていますが、値が存在しない場合のみです。

私の現在のバージョンは次のようになります。

for %%f in (xyz.exe) DO if [%%~$PATH:f]==[]; setx Path "%PATH%;%GRADLE_HOME%\bin" -m

私が抱えている問題は

setx Path "%PATH%;%GRADLE_HOME%\bin"  

これは機能しませんが、引用符を一重引用符に変更すると

setx Path '%PATH%;%GRADLE_HOME%\bin'

機能しますが、パスは Program Files の最初の出現で終了します。つまり abc;def;プログラム

これを克服する方法はありますか?

4

7 に答える 7

2

少し遅れましたが、似たようなものを探していて見つけられなかったので、自分で考え出しました。コマンド ラインから VSC# を起動するように変数を設定しようとしましたが、VSC# の exe ファイルは、ケースと同様のスペースを含むパスに存在していました。したがって、私にとっての解決策は、次を使用して変数を設定することでした。

setx vcs "\"E:\Program Files\IDE\vcsexpress.exe\"
于 2016-07-30T23:22:46.010 に答える
1

一重引用符は、Windows では機能しません。限目。

あなたのコードは、実際には二重引用符で機能します。

于 2012-06-13T08:49:12.653 に答える
0

%PATH% を直接使用することを断念しました。これには、プログラム ファイル内のスペースに関する上記の問題があったためです。

「Program Files」を「Progra~」に置き換える小さなコマンドを書きましたが、スペースを含む他のパスがあったため、これは良くないことにすぐに気付きました。交換

レジストリのクエリについて説明している良い記事を見つけました。
テストとして、パスとgradleを追加してシステム変数AAAを設定しました

for /F "tokens=2* delims=   " %%f IN ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g

setx.exe AAA "%OLD_SYSTEM_PATH%%%GRADLE_HOME%%\bin;" -m

お役に立てれば

于 2012-06-13T12:59:05.213 に答える