私は何をする必要がありますか:
%PATH%
環境変数に追加します。私がそれを行う方法:
.BAT
ファイルに書き込むことができる別の方法を使用する。スクリプトが動作する必要があるシステム:
私はSET
コマンドにかなり精通していますが、追加ではなく既存の変数を一般的にoverwriteすることも知っていますそれに。それは受け入れられません。代わりに変数に追加する別のツール(または私が知らないSET
のオプション)はありますか?または、既存の変数を別の変数またはテキストファイルに一時的にコピーすることを含む回避策をスクリプトに含める必要がありますか?
また、SET
が変数を永久に変更しないことは私の理解です。私はSETX
についての言及を見ましたが、それはWindowsに組み込まれているようには見えませんXP SP3(または、少なくとも、それは利用できないようです私が作業しているシステム上)レジストリの編集などを介して変更を永続的にする別の方法はありますか?
私は周りを見回して、Windowsでの環境変数の設定についてここからかなりのことを学びました。しかし、私はまだ自分のニーズに合う正確な重複質問を見つけていません。ある場合はお知らせください。
次の例では、「C:\ bin」をパスに追加し、新しいパスをレジストリに保存します。
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f
私はこれをXP SP3でのみテストしましたが、新しいバージョンでも動作するはずです。
マシンが再起動する前にログオンした新しいユーザーは、新しいパスを取得できない可能性があります。
ハリーは%SystemRoot%に関する彼のコメントに正解です。これらを保持したい場合は、最初にレジストリからパスの古い値を取得する必要があります。
@echo OFF
set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path
FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A
set ValueValue=%%C
)
if defined ValueName (
set newPath=%ValueValue%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f
set path=%path%;C:\bin
) else (
@echo %KEY_NAME%\%VALUE_NAME% not found.
)