Как я могу запустить команду FOR / F в пакетном файле, чтобы записать путь в значении реестра

#batch-file #registry

#пакетный файл #реестр

Вопрос:

Мне нужно получить значение реестра для HKLM SOFTWARE Adobe Photoshop 12.0 data dtring ApplicationPath. Значение представляет собой инструкцию path, такую как C:Program Файлы Adobe Adobe Photoshop CS5.1 (64-разрядная версия). Я пытаюсь запустить цикл FOR /F, чтобы получить это значение, и установить echo %%X для отображения значения, а затем установить для переменной APPFOLDER возвращаемое значение %%X. Ниже приведен код, который я использую. Возвращаемое значение усекается после C:Program . Он не отображает весь путь, потому что между ними есть пробел C:Program и файлы. Как я могу обойти эту проблему и захватить весь путь для значения ApplicationPath?

Переменная LINES — это номер строки, отображаемой командой REG Query в XP или Windows 7. В Windows 7 это 2 строки

 rem set LINES=2
rem ver | FIND "5.1" amp;amp; SET LINES=4
FOR /F "usebackq skip=%LINES% tokens=3*" %%X IN ('REG QUERY HKLMSOFTWAREAdobePhotoshop12.0 /v ApplicationPath') DO ( 
    echo %%X
    SET APPFOLDER=%%X
    )

rem Run the installer to remove Photoshop 12.1
if %APPFOLDER%="C:Program FilesAdobeAdobe Photoshop CS5.1 (64 Bit)"
    %SYSDIR%msiexec.exe /uninstall {67A1C99B-8E97-41AF-97DF-DDDE24A84C01} /quiet
    )   Else   (
    %SYSDIR%msiexec.exe /uninstall {5A430790-9605-48AF-B649-6A63B68863AE} /quiet
        )   
  

Ответ №1:

Вы должны использовать tokens=2,* вместо tokens=3* ,
так как 3* это то же самое, что 3,* вы получили только C:program в %%X, а остальное в %%Y.

При tokens=2,* этом вы получаете REG_SZ %%X, а остальное — %%Y