Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра

Ответить
Настройки темы
CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как сделать скрипт который будет удалять пустой ключ реестра, т.е. если в ключе (ветке) нет ничего.
Например, нужно удалить HKEY_LOCAL_MACHINE\SOFTWARE\DataStore (ключ DataStore) если в нём нет ни значений ни других ключей т.е. если он полностью пуст.
Существует ли возможность указать ключ для удаление в аргументах вызова скрипта?

Отправлено: 21:46, 19-09-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


ADSL3MD, для начала — закрепите терминологию, чтобы не возникало неоднозначностей в понимании. С большой долей уверенности предположу, что речь идёт всё-таки о разделе.

Можно попробовать и на CMD, но там будет некоторая зависимость от версии reg.exe. Например, для версии 3.0:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSubKey=%~1

if not defined sSubKey (
	echo Usage: %~nx0 ^<Registry SubKey^>
	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]"
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:14, 20-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Вариант:
Код: Выделить весь код
@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"

Последний раз редактировалось SendMessage, 20-09-2011 в 14:34.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 20-09-2011 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Да, это проще и работает. Единственно — если раздел отсутствует, то сообщение «Раздел … не пуст.» будет нелогичным.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:48, 20-09-2011 | #4


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большое спасибо за помощь.

Отправлено: 19:16, 20-09-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD-скрипт для удаление пустых ключей реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление пустых каталогов через CMD toro Скриптовые языки администрирования Windows 11 08-12-2022 12:35
CMD/BAT - [решено] Удаление пустых каталогов и подкаталогов через CMD Andzzzz Скриптовые языки администрирования Windows 5 29-08-2013 16:00
CMD/BAT - [решено] Удаление ключей реестра gen0m.rsw Скриптовые языки администрирования Windows 1 30-07-2010 13:14
CMD/BAT - [решено] CMD\BAT для сохранения ключей реестра. belohortvladimir Скриптовые языки администрирования Windows 5 14-06-2010 14:01
Любой язык - [решено] Нужен скрипт cmd,vbs,PowerShell для проверки списка пользователей и их удаление из AD alex_frog Скриптовые языки администрирования Windows 6 22-07-2009 18:41




 
Переход