Ich habe eine Batchdatei, die ich aus einem anderen Beitrag in diesem Forum habe und die den Pfad des Benutzers bearbeitet, aber sie stürzt ab, wenn der Pfad Einträge vom Typ „Programme (x86)“ enthält, die auf Windows 7-Rechnern häufig vorkommen. Irgendeine Idee, wie man das Skript reparieren kann, damit es mit diesen Einträgen funktioniert?
@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.
)
Antwort1
Das Skript schlägt fehl, weil der )
Codeblock Program Files (x86)
in Ihrer IF-Anweisung vorzeitig geschlossen wird.
Hier ist eine schnelle und einfache Lösung, mit der Sie das Problem lösen können, obwohl der Code noch immer nicht sehr robust ist.
@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 not defined ValueName (
@echo %KEY_NAME%\%VALUE_NAME% not found.
exit /b
)
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