2013-11-13 2 views
3

Я пытаюсь удалить определенные значения реестра. Я использовал the code (by "rojo").Как удалить несколько значений в реестре

  1. Этот код отлично работает, если вы определяете точный ключ. Например, я хочу удалить Logon.vbs из Run. Если я также хочу удалить Logoff.vbs, кажется, я не могу использовать * .vbs для удаления этих двух. Как я могу это сделать (удаление нескольких ключей с тем же расширением)?

  2. Связанный с этим вопрос заключается в том, как удалить ключ, содержащий определенные данные. Например, у меня есть ключ с именем Logon, который содержит данные в C: \ Windows \ Logon.vbs. Я хочу, чтобы и этот ключ был удален. При использовании приведенного выше примера это не сработало.

У меня есть разрешение на эти ключи, так что это не проблема. Что мне не хватает или что-то не так?

В качестве примера я предоставил скриншот, где пример (1) представлен красным цветом и (2) синим цветом. Скриншот: Regedit screenshot

код в моем первом примере будет выглядеть следующим образом:

@echo off 
setlocal 
set "DisableScripts=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 

rem get only the first token of each line of "reg query" 
for /f %%I in (
    'reg query "%DisableScripts%"' 
) do (
    echo(%%I | findstr /i "Logon.vbs" >NUL && (
     rem (if "findstr" didn't exit with an abnormal error code) 
     echo Deleting item %%I 
     reg delete "%DisableScripts%" /v "%%I" /f 
    ) 

Это удаляет ключ "logon.vbs" просто отлично. Однако я также хочу удалить «Logoff.vbs». Я пробовал использовать «* .vbs», но безрезультатно.

Вышеприведенный код также не удаляет значение «Script», в котором данные содержат Logon.vbs. Полагаю, мне нужно было как-то использовать переключатель /d для этого ...

+0

Вы должны добавить примеры на свои вопросы. – Endoro

+0

Привет Эндоро, вы правы, я добавил пример и дополнительную информацию. Заранее спасибо! – user2987842

+0

Привет, я разместил решение ниже, но я не могу понять, как удалить эти ключи с определенным значением в поле данных .... Кто-нибудь? Благодарю. – user2987842

ответ

3

Код для первого примера:

for /f %%a in ('reg query "%DisableScripts%" /s^|findstr /ic:"\.vbs "') do echo reg delete "%DisableScripts%" /v "%%~a" /f 

Код для второго примера:

for /f %%a in ('reg query "%DisableScripts%" /s^|findstr /eic:"C:\\logon\.vbs"') do echo reg delete "%DisableScripts%" /v "%%~a" /f 

Пожалуйста, обратите внимание Regex выражения "\.vbs " и "C:\\logon\.vbs". Используйте командную строку с правами администратора.

+0

Спасибо Энроро! При использовании:/s^findstr /ic:"\.vbs "он удаляет оба ключа с vbs в поле данных как ключи, у которых есть .vbs в их имени. – user2987842

0

Хорошо, так что я не уверен, как я пропустил это. Конечно, вы должны добавить % .... Ниже код, чтобы удалить все файлы VBS под ключ \ Run:

@echo off 
setlocal 
set "DisableScripts=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 

rem get only the first token of each line of "reg query" 
for /f %%I in (
    'reg query "%DisableScripts%"' 
) do (
    echo(%%I | findstr /i "%*.vbs" >NUL && (
     rem (if "findstr" didn't exit with an abnormal error code) 
     echo Deleting item %%I 
     reg delete "%DisableScripts%" /v "%%I" /f 
    ) 
(

Я буду проверять позже, как удалить некоторые данные из поля данных и отправьте сообщение здесь.

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