zendara
Goto Top

Variable per Batch auslesen und in Registry schreiben

Hallo,

ich versuche gerade einen Batch zuerstellen der mir gewisse Werte ausliest und als Variable in die Registry schreibt.

Das ganze funktioniert auch ganz gut außer in einem Pfad kommt eine Klammer vor. (zumindest denke ich dass das die Ursache ist)
Hier im Forum habe ich schon einige Beispiele gefunden wie man Sonderzeichen Maskiert aber ich komme trotzdem nicht weiter und hoffe auf eure Hilfe.

Ziel ist es den Installationspfad von unterschiedlichen Outlook-Versionen auszulesen und in eine Variable zu verarbeiten, damit man auf mehreren PCs mit den gleichen Befehlen arbeiten kann.

Hier ein Auszug meines Batchs

@echo off

:install_path

for /f "tokens=2*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE" /v "Path"') do set "Outlook_install_path=%%j"  
echo %Outlook_install_path%

:UserID
for /f "delims=" %%a in ('reg query HKEY_USERS ^|findstr "S-1-5-21-" ^|findstr /v "_Cl"') do set "UserID=%%a"  
set UserID=%UserID:~11,50%

echo UserID:				%UserID% & set "var_name=UserID" & set "var_value=%UserID%" & call :_add_systemvar  
if defined Outlook_install_path echo Outlook_install_path:	%Outlook_install_path% & set "var_name=Outlook_install_path" & set "var_value=%Outlook_install_path%" & call :_add_systemvar  

:_add_systemvar
:: set "var_value=%var_value:(=^(%" 
:: set "var_value=%var_value:)=^)%" 

:: set "var_value=%var_value:(=^^^(%" 
:: set "var_value=%var_value:)=^^^)%" 
:: set "var_value=%var_value:"=%" 

	echo.
	echo %var_value%
	echo.
	echo reg add HKCU\Environment  /f /v "%var_name%" /d "%var_value%"  
	echo.
	echo UserID: %UserID%
	echo.
pause
REM Schlüsselname HKEY_CURRENT_USER\Environment

reg add HKCU\Environment /v "%var_name%_test1" /d "%var_value%" /f  
reg add HKCU\Environment /f /v "%var_name%_test2" /d "%var_value%"  

REM 
	echo ende
pause

Das Ergebnis ist:

C:\Program Files (x86)\Microsoft Office\Root\Office16" /f  
bzw.
C:\Program Files (x86)\Microsoft Office\Root\Office16"  

Richtig wäre:

C:\Program Files (x86)\Microsoft Office\Root\Office16


Danke für eure Hilfe

Lg
Zendara

Content-Key: 334283

Url: https://administrator.de/contentid/334283

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: Zendara
Zendara 07.04.2017 um 11:36:59 Uhr
Goto Top
Jetzt habe ich eine Lösung gefunden.

Die Klammern waren nicht das Problem, sondern "\" am Ende des Pfads.
Bei diesem Beispiel kann man den Eintrag ohne zusätzliche Aufforderung per Batch in die Registry schreiben

:_add_systemvar
setlocal EnableDelayedExpansion
set "HKEY_1=HKCU\Environment"  
if "!var_value:~-1!"=="\" set "var_value=!var_value:~0,-1!"  
reg add %HKEY_1% /f /v "%var_name%" /d "%var_value%"  
goto:EOF

Eine weitere Möglichkeit ist es eine Registrydatei zu erstellen und diese dann auszuführen.
Der Nachteil ist, dass der Batch eine zusätzliche manuelle Aktion benötigt was bei einer Automatisierung nervt.

REM Diesen Teil bei bedarf weiter oben einfügen
REM==============================
set "reg=D:\Test_folder\var.reg"  
	echo Windows Registry Editor Version 5.00> %reg%
REM==============================

::_add_systemvar
setlocal EnableDelayedExpansion
if "!var_value:~-1!"=="\" set "var_value=!var_value:~0,-1!"  
set "HKEY_1=[HKEY_CURRENT_USER\Environment]"  
set "var_value=%var_value:\=\\%"  

	echo %HKEY_1%>> %reg%
	echo "%var_name%"="%var_value%">> %reg%  

goto:EOF

Lg Zendara
Mitglied: Pedant
Pedant 30.05.2017 um 16:00:58 Uhr
Goto Top
Hallo Zendara,

auch wenn Du Dein Problem schon selbst gelöst hast (und das dankenswerterweise nicht für Dich behalten hast), möchte ich dennoch etwas anmerken.

Zitat von @Zendara:
Eine weitere Möglichkeit ist es eine Registrydatei zu erstellen und diese dann auszuführen.
Der Nachteil ist, dass der Batch eine zusätzliche manuelle Aktion benötigt was bei einer Automatisierung nervt.

...schon eine zusatzliche Aktion, aber manuell muss sie nicht sein:
regedit.exe /s %reg%
oder
regedit.exe /s "D:\Test_folder\var.reg"
importiert die Regdatei ohne weiteres Zutun.

Alternativ zu "reg.exe add..." und "regedit.exe /s..." gibt es noch "setx.exe...".
setx variable wert
(Setzt eine permanente Umgebungsvariable für den CurrentUser)
[HKEY_CURRENT_USER\Environment]

setx variable wert /m
(Setzt eine permanente Umgebungsvariable für die Machine)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

Setx kann noch mehr als nur Umgebungsvariablen setzen, setx /? bringt mehr Infos.

Gruß Frank
Mitglied: Zendara
Zendara 07.06.2017 um 11:06:44 Uhr
Goto Top
Hallo Frank,

danke für die Ergänzung.
Ich werde mir das mal ansehen wie ich den Befehl bei mir einbinden kann.

Lg
Zendara