如果注册表项没有使用* .bat文件的值或子键,如何删除它?

时间:2013-06-09 13:17:33

标签: batch-file registry

问题是我只想在没有子键或值的情况下删除注册表项,并且我想使用* .bat文件来完成此操作。我还没有找到任何可行的解决方案。有人有什么想法吗?

2 个答案:

答案 0 :(得分:0)

可能有一种方法可以使用Windows系统命令执行此操作,但最快的路径可能是编写一个简单的控制台应用程序以接受密钥作为参数,然后检查子节点,删除没有任何节点。然后从批处理文件中调用它。如果这是可行的,我可以发布一些C#代码来完成这个技巧。

修改

这是一个简单的C#代码,用于控制台程序可以运行以删除密钥,只要它是空的。它使用HKEY_CURRENT_USER,但也可以轻松修改以访问HKEY_LOCALMACHINE。

using Microsoft.Win32;

namespace RegistryKeyDelete
{
   class Program
   {
      static int Main(string[] args)
      {
         const int EXIT_SUCCESS = 0;
         const int EXIT_FAILURE = 1;

         if (args.Length < 1)
            return EXIT_FAILURE;

         RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(args[0]);
         if (registryKey == null || registryKey.SubKeyCount != 0 || registryKey.ValueCount != 0)
            return EXIT_FAILURE;

         try {
            Registry.CurrentUser.DeleteSubKey(args[0], true);
         } catch {
            return EXIT_FAILURE;
         }

         return EXIT_SUCCESS;
      }
   }
}

将其构建为RegistryKeyDelete并在批处理文件中使用它:

RegistyKeyDelete Software\MyEmptyKey

如果您希望它在路径下遍历和解析注册表,您可以从上面的代码开始,然后枚举密钥并检查每个密钥。我假设你已经知道你正在检查哪些键。

BTW - 使用注册表执行任何操作时的标准免责声明:请谨慎使用并备份。

答案 1 :(得分:0)

使用简单的 Powershell 脚本

假设您在以下位置拥有以下注册码 ExtensionInstallForceList: HKLM:\SOFTWARE\Policies\Google\Chrome\

如果您想在为空时删除 regkey,您可以使用下一个代码。 当 regkey 为空时(除了默认值),键 'ExtensionInstallForceList' 将被删除,如果存在任何值,则不会删除该键。

# Remove regkey if empty
$remove = Get-ItemProperty HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForceList 
if (-not $remove) {
Remove-Item -Path HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForceList -Force
}

如果你想在没有 windows 的情况下运行 powershell 脚本,你可以使用 vbs 脚本

command = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File regkey-delete.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0