【问题标题】:Shortening a script, and making it easy to add new variables for the future缩短脚本,便于为将来添加新变量
【发布时间】:2014-09-18 11:09:42
【问题描述】:

我制作了一个删除一些注册表项的脚本。我已将所有键名设置为变量,并将指向它们的目的地也设置为变量。

我添加了 3 个目标作为变量,我希望在所有 3 个目标中删除相同的注册表项。

由于我是批处理的初学者,我无法制作复杂的脚本,并且删除所有这 3 个目的地中的所有这些注册表项所需的命令,至少可以说真的很长而且很笨拙.

我还需要这个代码是未来安全的,所以如果我们需要在这 3 个目标中删除一个新的注册表项,我们只需添加一个新的 REG_KEY 变量,它仍然可以工作。只需对代码进行另一个小改动就可以了。

有人能帮我把它缩短吗?看这里你会得到一个想法:http://pastebin.com/VnA16y5i

提前致谢。

【问题讨论】:

    标签: windows batch-file registry


    【解决方案1】:
    @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 命令检索路径,对于每个路径,一个set REG_KEY 检索键列表。输出行被拆分以分隔变量的名称和其中的值。

    为便于管理,已填充变量号以确保执行顺序与定义顺序一致。

    reg delete 操作仅回显到控制台。如果输出正确,去掉echo命令

    【讨论】:

    • 您好,非常感谢!我真的很喜欢这个解决方案。很简单,您只需要更改变量即可,就像我想要的那样。但是,它似乎尝试在每个目标中删除每个注册表项两次。有什么原因,还是可以将其更改为在每个目的地仅运行一次?
    • @ShadowSF96,看来您仍然将原始代码中的变量定义到环境中。我在批处理文件的开头包含了两行,以便在开始分配键之前删除以前的值。
    • 啊,你完全正确。我没有尝试使用新的命令提示符。我的错。您的脚本工作得非常出色,我将把它用于我的最终产品。 @Magoo 的脚本也很棒,但我更喜欢这个,因为你只需要一个文件。非常感谢您的帮助,祝您有美好的一天!
    【解决方案2】:
    @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...
    

    结果:简单地将所需的新键/路径添加到文件中以展开清除。

    显然,请谨慎使用。请注意,所需的命令只是echoed。将ECHO(reg验证后改为reg,激活reg delete...

    【讨论】:

    • 感谢您提供此解决方案,对于对批处理知识不太了解的人来说,它简单易用!已添加到我的考虑中,非常感谢!
    猜你喜欢
    • 2010-09-25
    • 2011-11-23
    • 1970-01-01
    • 2012-04-28
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多