2015-08-20 3 views
0

Привет народ StackOverflow,пакетный файл, запрос реестра

Я пытаюсь запросить местоположение последующего реестра (каждая папка здесь) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

В есть случайные числа так:

{071c9b48-7c32-4621-a0ac-3f809523288f} 

В каждом из этих случайных чисел мне нужно проверить, содержит ли ключ «DisplayName», который находится в каждом из этих мест, определенный текст, позволяет сказать «OverFlow».

Я сделал несколько запросов, но не так, если кто-то может помочь, это было бы здорово!

EDIT: Я сделал некоторые успехи, но я сталкиваюсь с проблемой (я сделал много исследований ...)

Ниже то, что я до сих пор:

@echo off 

setlocal 


:RemoveCVCP 
set PythonReg= 
for /f "tokens=1" %%A in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s /v "DisplayName" ^| find "Python"') do set "PythonReg=%%A" 
if %ERRORLEVEL% neq 0 (
GOTO RemovePyCP) 
echo %PythonReg% 

endlocal 

pause 

Что я m пытается сделать цикл через «KLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall», и посмотрите на «DisplayName», если данные содержат «Python», а затем удалите его. и продолжайте идти, пока их больше нет.

Прямо сейчас я тестирую это с помощью эха, но он его удалит.

(Я просто использую Python в качестве примера, я уже удалил все остальное, что связано с программным обеспечением, я пытаюсь удалить, это последнее место.)

Спасибо, Майкл

+0

Вы уверены, что хотите искать только записи, как описано? (кстати, это [GUID] (https://en.wikipedia.org/wiki/Globally_unique_identifier) ​​s). Есть и другие записи, некоторые приложения перечислены там по имени. – CristiFati

+0

Подождите .. Как насчет этого? http://www.fixedbyvonnie.com/2014/07/view-installed-programs-one-powershell-command/ Это должно показать детали, которые вы ищете. – Leptonator

+0

Мне нужно сделать это в пакетном режиме, так как в моем сценарии всего 700 строк. – Mike

ответ

1

Во-первых, перечислить все значения, которые содержат python, две строки будут напечатаны для каждой записи:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{E43BBAEB-4914-44C6-88C0-E7A1DBD20A91} 
    DisplayName REG_SZ Some application title with python in its name 

затем удалить эти ключи, где имя напечатано значение DisplayName:

@echo off 
setlocal enableDelayedExpansion 

for /f "tokens=1,2*" %%A in ('^ 
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s /d /f "python"^ 
') do (
    if "%%A"=="DisplayName" (
     echo Deleting %%C 
     reg delete !key! /f 
    ) else (
     set str=%%A 
     if "!str:~0,4!"=="HKEY" set key=%%A 
    ) 
) 
pause 

Этот код предполагает, что в названии ключа нет пробелов.

+0

Удивительно, я пробовал весь день. Спасибо за ответ. Могу ли я попросить вас разбить этот код, что он делает в частном порядке. В дополнение к этому я еще не использовал. – Mike

+0

Код довольно прост, что именно вы хотите объяснить? – wOxxOm

+0

Вы используете^в начале рег-запроса и в конце, почему? Также %% C не определен где-то, я принимаю его набор с помощью токена '1,2'? И это: reg delete! Key!/f ) else() set str = %% A if "! str: ~ 0,4!" == "HKEY" set key = %% A Извините за вопросы, я действительно пытаюсь проникнуть в скрипты :) – Mike

Смежные вопросы