Jak na stałe ustawić% PATH% w zmiennej systemowej lub zmiennej użytkownika w wierszu poleceń?


Po otwarciu sysdm.cpl - & > Zaawansowane - & > Zmienne środowiska. widać, że środowisko env jest podzielone na dwie sekcje:
jeden
       User Variables
, inne
       System Variables
, oba mają zmienną
       PATH
w nich.
Teraz, jeśli uciekniesz
       set
wewnątrz
       cmd
wskazówka, pokazuje tylko jedną nazwę zmiennej o nazwie
       PATH
i zawiera konkatenację powyższych.
Jak jawnie ustawić
       System Variable
lub
       User Variable
w wierszu poleceń przez cały czas?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Przeczytaj i śledź

ta wyczerpująca odpowiedź autorstwa Rojo
http://stackoverflow.com/a/31889785/3439404
na podobne pytanie w StackOverflow:

Jak ustawić zmienną środowiskową PATH w pliku wsadowym tylko raz w systemie Windows?
http://stackoverflow.com/questions/31885906
.
Poniżej znajduje się skrypt wsadowy/cmd, który wcześniej napisałem.

czek

katalogi w moim
         %PATH%
a także w odpowiednich wartościach rejestru w
         HKLM
i
         HKCU
... Skrypt nie zapisuje niczego w rejestrze; pokazuje tylko inne możliwe podejście do takiego problemu

w czystej partii/cmd

i pokazuje, że jego rozwiązanie nie może być trywialne.
Za pomocą:
  •            testpath.bat         
    (bez parametru): czeki
               %PATH%         
    składnia zmiennych; premia : pokazuje zbędne dwulicowość w
                 %PATH%           
    zmienna
    ;
  •            testpath.bat dir         
    (Uwaga dosłowny parametr
               DIR         
    ): wyświetla listę plików wykonywalnych (zgodnie z definicją w
               PATHEXT         
    zmienna) dla każdego konkretnego katalogu w
               %PATH%         
    ; premia : pokazuje zbędne i bezużyteczne katalogi w
                 %PATH%           
    zmienna
    :

@ECHO OFF
SETLOCAL enableextensions enabledelayedexpansion
echo --- %date% %time% %~nx0 %*
if/I "%~1" EQU "dir" ( set path
Call :printPath path "" dir
ENDLOCAL
goto :eof)set pathextCall :duplicity pathextCall :printPath path ""rem debugging set "wrongpath=%path%;%SystemRoot%\\"
rem debugging Call :duplicity wrongpathCall :duplicity pathset "HKCU_type="
set "HKCU_path="
for/F "tokens=2*" %%G in ( 'reg query HKCU\Environment/v Path 2^>NUL ^|findstr/I "path"'
) do ( set "HKCU_type=%%G"
set "HKCU_path=%%H"
)
Call :printPath HKCU_path %HKCU_type%
if/I "%HKCU_type%"=="REG_EXPAND_SZ" Call :printPath HKCU_path %HKCU_type% Expandedset "HKLM_type="
set "HKLM_path="
set "qqqq=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
for/F "tokens=2*" %%G in ('reg query "%qqqq%"/v Path^|findstr/I "path"'
) do ( set "HKLM_type=%%G"
set "HKLM_path=%%H"
)
Call :printPath HKLM_path %HKLM_type%
if/I "%HKLM_type%"=="REG_EXPAND_SZ" Call :printPath HKLM_path %HKLM_type% Expanded:dirOnly
Call :deflatePath HKLM_path %HKLM_type%
rem echo "!NewPath:%%=%%%%!"pause
set HK
ENDLOCAL&call set "NewPath=%NewPath%"
goto :eof:printPath
echo(echo %~0 %~1 %~2 %~3
if "!%~1!" NEQ "" ( set "ggg="!%~1:;=" "!""
rem set "ggg=!ggg:\"="!"
for %%G in (!ggg!) do ( if/I "%~3" NEQ "expanded" ( if/I "%~3" EQU "dir" ( echo( echo %~0 %~1 %~2 %%~G
set "_partpath=%%~G"
if/I "!_partpath:%SystemRoot%=!" EQU "%%~G" ( dir/B/A:-D "%%~G" | findstr/I "%pathext:;=$ %$"
rem timeout/T 3/NOBREAK >NUL
) else ( echo %~0 %~1 %~2 System default
)
) else ( echo %%~G
)
) else ( call echo %%~G
)
)
echo( echo tested using next findstr regex:
echo "%pathext:;=$ %$")
goto :eof:duplicity
echo(echo %~0 %~1 %~2
set/A "ii=0"
set "ggg="!%~1:;=" "!""
set "ggg=!ggg:\"="!"
for %%G in (!ggg!) do ( set/A "ii+=1"
set/A "jj=0"
for %%g in (!ggg!) do ( set/A "jj+=1"
if/I "%%~G"=="%%~g" if !ii! LSS !jj! echo !ii!, !jj!: %%~g
))
goto :eof:deflatePath
echo(echo %~0 %~1 %~2
set "ggg="!%~1:;=" "!""
rem set "ggg=!ggg:\"="!"
set "NewPath="
for %%G in (!ggg!) do ( set "item=%%~G"
set "meti="
call :deflateItem "ProgramFiles(x86)"
if defined meti ( rem echo # !item!
) else ( call :deflateItem "ProgramFiles"
if defined meti ( rem echo # !item!
) else ( call :deflateItem "SystemRoot"
if defined meti ( rem echo # !item!
) else ( rem echo = !item:%%=%%%%!
)
)
)
if defined NewPath ( set "NewPath=!NewPath!;!item!"
) else ( set "NewPath=!item!"
))
echo !NewPath!
rem reg delete HKCU\Environment/v NewPath/f
rem setx NewPath "!NewPath!"
rem WARNING: The data being saved is truncated to 1024 characters.
rem reg query HKCU\Environment/v NewPath|findstr/I "NewPath"
goto :eof:deflateItem
set "meti=!%~1!"
if "!meti!"=="!item!" ( set "item=%%%~1%%"
) else ( set "meti=!item:%meti%\=!"
if "!meti!" == "!item!" ( set "meti="
) else ( set "item=%%%~1%%\!meti!"
)
)
goto :eof

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się