Archivo por lotes para editar la ruta de los usuarios

Archivo por lotes para editar la ruta de los usuarios

Tengo un archivo por lotes que obtuve de otra publicación en este foro que edita la ruta del usuario, pero falla si la ruta contiene entradas de Archivos de programa (x86) que son comunes en máquinas con Windows 7. ¿Alguna idea de cómo arreglar el script para que funcione con estas entradas?

@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.
)

Respuesta1

El script falla porque el )in Program Files (x86)está cerrando prematuramente el bloque de código en su declaración IF.

Aquí hay una solución rápida y sucia que debería ayudarlo a superar ese problema, aunque el código aún no es muy sólido.

@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

información relacionada