Как сделать скрипт который будет удалять пустой ключ реестра, т.е. если в ключе (ветке) нет ничего.
Например, нужно удалить HKEY_LOCAL_MACHINE\SOFTWARE\DataStore (ключ DataStore) если в нём нет ни значений ни других ключей т.е. если он полностью пуст.
Существует ли возможность указать ключ для удаление в аргументах вызова скрипта?
CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра
-
Iska
Re: CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра
ADSL3MD, для начала — закрепите
Можно попробовать и на CMD, но там будет некоторая зависимость от версии reg.exe. Например, для версии 3.0:
Код:
В WSH («WScript.Shell»/WMI) с этим совсем плохо (всё упирается в ошибки реализации при работе с Default-значением). Проще всего на PowerShell, наподобие:
Код:
терминологию
, чтобы не возникало неоднозначностей в понимании. С большой долей уверенности предположу, что речь идёт всё-таки о разделе.Можно попробовать и на CMD, но там будет некоторая зависимость от версии reg.exe. Например, для версии 3.0:
Код:
Код: Выделить всё
@echo off
setlocal enableextensions enabledelayedexpansion
set sSubKey=%~1
if not defined sSubKey (
echo Usage: %~nx0 ^
exit /b 255
)
reg.exe query "%sSubKey%" 1>nul 2>&1 || (
echo Registry Subkey [%sSubKey%] not found
exit /b 1
)
for /f %%i in (
'reg.exe query "%sSubKey%" /s ^| find.exe /i /v "" /c'
) do set /a sLines = %%i
if defined sLines if %sLines% equ 4 reg.exe delete "%sSubKey%" /f 1>nul
endlocal
exit /b 0В WSH («WScript.Shell»/WMI) с этим совсем плохо (всё упирается в ошибки реализации при работе с Default-значением). Проще всего на PowerShell, наподобие:
Код:
Код: Выделить всё
Param
(
[parameter(
Mandatory = $True,
Position = 0
)]
[String]
$SubKey
)
$sSubKey = "Registry::" + $SubKey
if (Test-Path -Path $sSubKey) {
$oPath = Get-Item -Path $sSubKey
if (($oPath.SubKeyCount -eq 0) -and ($oPath.ValueCount -eq 0)) {
try {
Remove-Item -Path $oPath.PSPath
} catch { }
}
} else {
Write-Host "Not found registry subkey [$SubKey]"
}-
SendMessage
Re: CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра
Вариант:
Код:
Имя исследуемого раздела нужно писать без сокращения имени ветки: не HKLM, а HKEY_LOCAL_MACHINE. Ну и другие ветки, естественно, так же.
Пример запуска из комстроки:
Код:
Код:
Код: Выделить всё
@echo off
set "Key=%~1"
for /f "delims=" %%a in ('reg query "%Key%" /s') do set "Val=%%a"
if /i "%Val%"=="%Key%" (
reg delete "%Key%" /f
echo Раздел %Key% удален.
) else (
echo Раздел %Key% не пуст.
)Имя исследуемого раздела нужно писать без сокращения имени ветки: не HKLM, а HKEY_LOCAL_MACHINE. Ну и другие ветки, естественно, так же.
Пример запуска из комстроки:
Код:
Код: Выделить всё
DelEmptyKey.bat "HKEY_LOCAL_MACHINE\SOFTWARE\DataStore"-
Iska
Re: CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра
Да, это проще и работает. Единственно — если раздел отсутствует, то сообщение «Раздел … не пуст.» будет нелогичным.
-
ADSL3MD