reg.exe add /f not working in batch file, still getting prompted

Archivo simple por lotes Cada cosa funciona bien excepto la clave del registro.

@ECHO off

REM Creating Directory if it does not exist

if not exist "%SystemDrive%\Home drive\%1\Documents\Favorites\" (mkdir "%SystemDrive%\Home drive\%1\Documents\Favorites\"

REM Copy Bookmarks from source to new folder

copy /v "%SystemDrive%\Home drive\%1\Favorites\*" "%SystemDrive%\Home drive\%1\Documents\Favorites\"

REM Set reg location for favorites

reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Favorites /t REG_SZ /d "%SystemDrive%\home Drive\%1\Documents\Favorites\" /f)

Pero aún así se pide sobreescribir la clave del reg, y peor aún, lo hace mal

C:\Users\goadmin>MoveFavoritesFolderTest.bat Alex.Wilber

C:\Home drive\Alex.Wilber\Favorites\Best Buy  Official Online Store  Shop Now & Save.url

C:\Home drive\Alex.Wilber\Favorites\Bing.url

C:\Home drive\Alex.Wilber\Favorites\Google.url

C:\Home drive\Alex.Wilber\Favorites\NFLShop - The Official Online Shop of the NFL  2020 NFL Nike Gear, NFL Apparel & NFL Merchandise.url

        4 file(s) copied.

>>> This is the problem
Value Favorites exists, overwrite(Yes/No)? yes
The operation completed successfully.

Even if I say YES the reg key value is set incorrectly. 
"C:\home Drive\Alex.Wilber\Documents\Favorites" /f "

Lo que es realmente extraño es que este guión funciona bien...

@ECHO off

REM Creating Directory if it does not exist
if not exist %USERPROFILE%\Documents\Favorites\ (mkdir %USERPROFILE%\Documents\Favorites\

REM Copy Bookmarks from source to new folder
copy /y /v %USERPROFILE%\Favorites\* %USERPROFILE%\Documents\Favorites\

REM Set reg location for favorites
reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Favorites /t REG_SZ /d "%USERPROFILE%\Documents\Favorites" /f )

Pregunta hecha hace 3 años, 4 meses, 29 días - Por binarybuilder


2 Respuestas:

  • El problema en tu script de archivo por lotes es que estás teniendo un pequeño error de sintaxis en la sección donde intentas agregar la clave del Registro. Además, parece que hay un paréntesis adicional al final de la línea que no es necesario y que está causando el problema.

    Aquí está la parte corregida de tu script:

    batch
    REM Set reg location for favorites
    reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Favorites /t REG_SZ /d "%SystemDrive%\home Drive\%1\Documents\Favorites\" /f
    

    Eliminé el paréntesis adicional al final de la línea y ajusté la sintaxis para que el comando reg.exe agregue la clave del Registro sin solicitar confirmación (/f).

    Con estos cambios, el script debería funcionar correctamente y establecer la clave del Registro de la manera esperada. ¡Inténtalo y hazme saber si tienes alguna otra pregunta!

    Respondida el Dec 18, 2020 a las 22:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código por lotes es que hay un error tipográfico en el comando reg.exe. El comando correcto para agregar un valor de registro sin ser solicitado es:

    
    reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Favorites /t REG_SZ /d "%SystemDrive%\home Drive\%1\Documents\Favorites\" /f
    

    Deberías cambiar /f por /f *<strong>> para suprimir el mensaje de confirmación.

    El código corregido debería ser:

    
    @ECHO off
    
    REM Creating Directory if it does not exist
    if not exist "%SystemDrive%\Home drive\%1\Documents\Favorites\" (mkdir "%SystemDrive%\Home drive\%1\Documents\Favorites\"
    
    REM Copy Bookmarks from source to new folder
    copy /v "%SystemDrive%\Home drive\%1\Favorites\" "%SystemDrive%\Home drive\%1\Documents\Favorites\"
    
    REM Set reg location for favorites
    reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Favorites /t REG_SZ /d "%SystemDrive%\home Drive\%1\Documents\Favorites\" /f >nul
    

    El símbolo >nul al final del comando reg.exe redirige la salida de error o confirmación a nul, suprimiéndola efectivamente.

    Nota: Asegúrate de que el usuario que ejecuta el archivo por lotes tenga privilegios administrativos para realizar cambios en el registro.

    Respondida el Dec 18, 2020 a las 22:24 - por Gemini

    Votos positivos: 0 | Votos negativos: 0