REG QUERY в сочетании с FOR возвращает половину того, что мне нужно

У меня есть раздел реестра, созданный InnoSetup во время установки. Этот ключ содержит две информации:

  • Отображаемое имя
  • QuietUninstallString

Я не знаю, каково полное имя моего ключа. Единственная информация, которая у меня есть, это путь:

"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"

и значение ключа «DisplayName» (MyApplicationName).

Что мне нужно сделать, так это получить значение «QuietUninstallString», которое должно быть путем с «/ SILENT» в конце пути.

Прямо сейчас я написал этот пакетный файл:

@echo off
setlocal enableextensions disabledelayedexpansion
set tosearch=%1

for /f "tokens=3" %%a in ('
    REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /s /f %tosearch% ^| findstr "QuietUninstallString"
') do set "value=%%a"

echo %value%

И я называю это так:

test.bat MyApplicationName

Проблема в том, что когда я запускаю этот файл, он возвращает:

"C:\Program

Пока я хочу, чтобы это было возвращено:

"C:\Program Files (x86)\MyFolder\MyApplicationName\unins000.exe" /SILENT

Есть ли лучший способ получить информацию с помощью моего пакетного файла?

Используйте tokens=2,* и set "value=%%b". См. for /? из подсказки для документации

Magoo 17.05.2022 14:30

Спасибо, я пробовал с tokens=2,*, но забыл изменить value==%%a на value==%%b. Можете ли вы написать это как ответ, чтобы я мог принять его? @Magoo

Alex 17.05.2022 16:05
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Основываясь на том, что вы опубликовали, вы сможете заменить весь свой код следующим:

@For /F "EOL= Delims=" %%G In ('%SystemRoot%\System32\reg.exe Query
 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /S /F
 "%~1" /E /D 2^>NUL') Do @For /F "Tokens=2,*" %%H In (
    '%SystemRoot%\System32\reg.exe Query "%%G" /V "QuietUninstallstring" 2^>NUL'
) Do @Echo(%%I

Или, если намерение состоит в том, чтобы фактически запустить строку удаления:

@For /F "EOL= Delims=" %%G In ('%SystemRoot%\System32\reg.exe Query
 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /S /F
 "%~1" /E /D 2^>NUL') Do @For /F "Tokens=2,*" %%H In (
    '%SystemRoot%\System32\reg.exe Query "%%G" /V "QuietUninstallstring" 2^>NUL'
) Do @Start "" %%I

Спасибо, с тем, что я написал благодаря комментарию Magoo и второй части вашего ответа, теперь у меня есть что-то лучше, и это работает лучше, чем то, что я намеревался сделать.

Alex 17.05.2022 17:14
Ответ принят как подходящий

Используйте tokens=2,* и установите "value=%%b". Смотрите для /? из подсказки для документации

Другие вопросы по теме