#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