PATH-Variable (user), sicherstellen, dass Eintrag vorhanden
Hallo Experten,
trotz langer Recherche und Suche habe ich leider keine Lösung für mein Problem gefunden.
Ich möchte via Batchfile prüfen, ob für den angemeldeten User (nicht System, nur User!) in der PATH-Umgebung ein bestimmter Pfad enthalten ist. Nennen wir ihn c:\stuff
Sofern c:\stuff also nicht im user path enthalten ist, soll dieser Wert ans Ende hinzugefügt werden. Die Änderung sollte nach Möglichkeit sofort greifen.
Lässt sich das realisieren via Batch und wenn ja, wie?
Besten Dank im Voraus!
trotz langer Recherche und Suche habe ich leider keine Lösung für mein Problem gefunden.
Ich möchte via Batchfile prüfen, ob für den angemeldeten User (nicht System, nur User!) in der PATH-Umgebung ein bestimmter Pfad enthalten ist. Nennen wir ihn c:\stuff
Sofern c:\stuff also nicht im user path enthalten ist, soll dieser Wert ans Ende hinzugefügt werden. Die Änderung sollte nach Möglichkeit sofort greifen.
Lässt sich das realisieren via Batch und wenn ja, wie?
Besten Dank im Voraus!
Please also mark the comments that contributed to the solution of the article
Content-Key: 81313629727
Url: https://administrator.de/contentid/81313629727
Printed on: June 3, 2024 at 08:06 o'clock
12 Comments
Latest comment
Moin,
Gruß
das ist schon mal ein guter Anfang
stimme zu - ein guter Anfang, die grundlegenden Programmiertaktiken zu lernen.Pfad dann hinzugefügt, sofern er nicht bereits vorhanden ist?
Dein Pseudocode würde ja schon funktionieren..Gruß
Aber wie bekomme ich im zweiten Schritt den Pfad dann hinzugefügt, sofern er nicht bereits vorhanden ist?
@echo off
set "mypath=C:\Anotherpath"
for /f "skip=2 tokens=1,2,*" %%a in ('reg query HKCU\Environment /v Path') do set "userpath=%%c"
reg query HKCU\Environment /v Path | findstr /ilc:"%mypath%" >nul 2>&1 || reg add HKCU\Environment /v Path /d "%userpath%;%mypath%" /f
Oder als Alternative mit Hilfe der Powershell in der Batch so
@echo off
set "mypath=C:\Anotherpath"
powershell -EP Bypass -C "$mypath = '%mypath%'; $userpath = [environment]::GetEnvironmentVariable('Path','User'); if($mypath -notin ($userpath -split ';')){[Environment]::SetEnvironmentVariable('Path',"$userpath;$mypath",'User')}"
Zitat von @hempel:
Dann hat man aber hinterher auch die Systemvariablen mit in der Uservariable drin. Aber wie bekomme ich im zweiten Schritt den Pfad dann hinzugefügt, sofern er nicht bereits vorhanden ist?
reg add HKCU\Environment /v Path /d "%PATH%;C:\AnotherPath" /f
@echo off
set "search=c:\stuff"
for /f "Tokens=2,*" %%A in ('reg query HKCU\Environment /v Path') do call :checkPath "%%~B"
pause
exit /b 0
:checkPath
echo]%~1 | >nul findstr "%search%"
if %ErrorLevel% equ 0 (echo]Pfad steht in Umgebungsvariable.) else (
reg add HKCU\Environment /v Path /t REG_EXPAND_SZ /d "%~1;%search%" /f
echo]Pfad wurde zur Umgebungsvariable hinzugefuegt.
)
Dafür nimmst du am besten Powershell...
$User = [Environment]::GetEnvironmentVariable("Path","User").Split(';')
$System = [Environment]::GetEnvironmentVariable("Path","Machine").Split(';')
$CleanUser = $User | ?{$_ -NotIn $System -and $_} | Select -Unique
[Environment]::SetEnvironmentVariable("Path",($CleanUser -Join ";"),"User")