Agregar registro con el script cmd

Sep 13 2020

Quiero establecer el modo de compatibilidad a través de cmd y, por lo tanto, creé un script por lotes (ver código) que agrega un registro al archivo .exe en el directorio actual. El único problema es que cuando uso "%CD%\Launcher.exe"el nombre de registro (ruta) está mal configurado ->C:\Users\USER\Desktop\Games\NEWFOL~1\Launcher.exe

Pero cuando ingreso la ruta completa al script, el nombre del registro es correcto. ¿Por qué es así y cómo se soluciona?

Este es mi guión:

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------      
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%CD%\Launcher.exe" /t REG_SZ /d "WIN98 256COLOR 640X480" /f
exit

Respuestas

1 ItWasn'tMe Sep 15 2020 at 21:00

Necesita agregar escape \ "comillas \" :

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v \""%CD%\Launcher.exe"\" /t REG_SZ /d \"WIN98 256COLOR 640X480\" /f

O, solo en su camino, porque no estoy seguro de si "WIN98 256COLOR 640X480"necesitará escapar para establecer estos parámetros ...

<con: REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v \""%CD%\Launcher.exe"\" /t REG_SZ /d "WIN98 256COLOR 640X480" /f