2014-09-18 1 views
0

Я создал сценарий, который удаляет некоторые ключи реестра. Я задал все имена ключей как переменные, а также пункт назначения, который также приводит к ним как переменные.Сокращение сценария и упрощение добавления новых переменных для будущего

Я добавил 3 адресата в качестве переменных, где я хочу, чтобы те же ключи реестра были удалены во всех 3 пунктах назначения.

Поскольку я новичок в группе, я не смог создать сложный скрипт, а команды, необходимые для удаления всех этих ключей реестра во всех этих трех пунктах назначения, оказались очень длинными и неуклюжими, чтобы сказать, что наименее.

Мне также нужен этот код для обеспечения безопасности в будущем, поэтому, если нам понадобится новый раздел реестра, удаленный в этих 3 пунктах назначения, мы сможем просто добавить новую переменную REG_KEY, и она все равно будет работать. Еще одно незначительное изменение кода было бы неплохо.

Может ли кто-нибудь помочь мне укоротить его? Вы получите представление о себе: http://pastebin.com/VnA16y5i

Заранее спасибо.

ответ

2
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    for /f "delims==" %%a in ('set REG_KEY 2^>nul') do set "%%a=" 
    for /f "delims==" %%a in ('set REG_PATH 2^>nul') do set "%%a=" 

    SET "REG_KEY01={0EA09877-34E9-4160-B2DE-E7C7703E49ED}" 
    SET "REG_KEY02={2F3A6749-B379-4879-9AF8-5C0F04084C74}" 
    SET "REG_KEY03={350612EB-55FE-47DC-8E07-197B2409909B}" 
    SET "REG_KEY04={628ED0F8-590B-49CF-A525-A1696BD79304}" 
    SET "REG_KEY05={69BCC264-0D43-469F-8434-31E738982E7B}" 
    SET "REG_KEY06={80416A15-214B-4F25-A025-ED6E875631F2}" 
    SET "REG_KEY07={8EC141DE-D310-4A57-B363-02E00627B3F0}" 
    SET "REG_KEY08={8EC376A3-F279-47D7-97AA-7BA2A2EB006E}" 
    SET "REG_KEY09={915EABF2-2C1A-45C3-89DF-067C1AD39649}" 
    SET "REG_KEY10={9AA9FEE7-9F99-4E69-947A-49F7DA0DDA3A}" 
    SET "REG_KEY11={A43014F4-44F8-4539-8F87-C8471CB810B1}" 
    SET "REG_KEY12={B242E104-74A3-4A32-B665-58677B671A9C}" 
    SET "REG_KEY13={F63E747C-5B51-4A6E-9413-BF258F4653F3}" 
    SET "REG_KEY14={AAAB700A-DDB7-4298-AB4B-B6E9F785059C}" 

    SET "REG_PATH00=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components" 
    SET "REG_PATH01=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Caphyon\Advanced Installer\LZMA" 
    SET "REG_PATH02=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 

    for /f "tokens=1,* delims==" %%o in ('set REG_PATH' 
    ) do for /f "tokens=1,* delims==" %%j in ('set REG_KEY' 
    ) do echo reg delete "%%p\%%k" /f /va 

Этот код извлекает содержимое из переменных окружения с помощью двух set команд, одна set REG_PATH команд для retrive пути, и для каждой из дорожки, set REG_KEY, чтобы получить список ключей. Выходные линии разделяются на отдельные имя переменной и значение внутри нее.

Для облегчения управления переменные номера были дополнены, чтобы гарантировать, что порядок выполнения соответствует порядку определения.

reg delete операции отражены только на консоли. Если вывод является правильным, удалите команду echo

+0

Привет, большое спасибо! Мне действительно нравится это решение. Простой, и вам нужно только изменить переменную, чтобы она работала, как хотелось бы. Однако кажется, что он пытается удалить каждый раздел реестра дважды в каждом пункте назначения. Любая причина для этого или может быть изменена только для запуска в каждом пункте назначения? – ShadowSF96

+0

@ ShadowSF96, кажется, что у вас все еще есть переменные в исходном коде, определенном в среде. Я включил две строки в начале командного файла, чтобы удалить предыдущие значения, прежде чем начинать назначать ключи. –

+0

А, ты совершенно прав. Я не пробовал использовать новую командную строку. Виноват. Ваш скрипт работает абсолютно блестяще, и я буду использовать его для своего финального продукта. @ Сценарий Magoo тоже хорош, но я предпочитаю это, так как вам нужен только один файл. Большое спасибо за все, что вы помогаете, отлично провели день! – ShadowSF96

1
@ECHO OFF 
SETLOCAL 
FOR /f "delims=" %%a IN (regkeys.txt) DO (
FOR /f "delims=" %%b IN (regpaths.txt) DO (
    ECHO(reg delete "%%b\%%a" /f /va 
) 
) 

GOTO :EOF 

Где regkeys.txt содержит

{0EA09877-34E9-4160-B2DE-E7C7703E49ED} 
{2F3A6749-B379-4879-9AF8-5C0F04084C74} 
{350612EB-55FE-47DC-8E07-197B2409909B} 
{628ED0F8-590B-49CF-A525-A1696BD79304} 
...etc... 

И regpaths.txt содержит

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Caphyon\Advanced Installer\LZMA 
...etc... 

Результат: Simpy добавить нужный новый ключ/путь к файлам для расширения продувки.

Следует использовать с осторожностью, очевидно. Обратите внимание, что требуемые команды будут просто echo ред. Изменить ECHO(regпосле проверки до reg, чтобы активировать reg delete ...

+0

Благодарим вас за это решение, простую и удобную в использовании для людей с не таким большим количеством знаний с партией! Был добавлен к моим соображениям, спасибо большое! – ShadowSF96

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