问题是我只想在不存在子项或值的情况下删除注册表项,并且我想使用 *.bat 文件完成此操作。我还没有找到任何可行的解决方案。有人有什么想法吗?
2 回答
可能有一种方法可以使用 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
如果你想让它在一个路径下遍历和解析注册表,你可以从上面的代码开始,然后枚举键并检查每个键。我假设您已经知道要检查哪些键。
顺便说一句 - 对注册表进行任何操作时的标准免责声明:谨慎使用并进行备份。
使用简单的 Powershell 脚本
假设您在以下位置具有以下 regkey 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