CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Код:

Код: Выделить всё

@echo off
setlocal enabledelayedexpansion
set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB"
for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr "%Section%\\Vid_ USBSTOR"') do (
   if "%%a"=="Service	REG_SZ	USBSTOR" (if "!ps:~0,4!"=="Vid_" echo reg delete "%Section%\!ps!" /f >> usbstor.txt)
   set "ps=!s!"&set "s=%%~na"
)

То, что выделено красным, нужно убрать. Но я настоятельно советую прежде запустить в нынешнем виде и проверить в реестре правильность скрипта.
Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Цитата Lightman123:



как сюда вместо этого добавить название подраздела
CMD/BAT - [решено] .bat: удаление значения реестра после отбора




Так?



Код:

Код: Выделить всё

@echo off
setlocal
set "section=hklm\system\controlset001\control\class\{36FC9E60-C465-11CF-8056-444553540000}"
for /f "tokens=3" %%i in ('reg query "%section%" /v "infsection"') do (
    if /i "%%i"=="USBSTOR_BULK"  reg delete "%section%" /v "infsection" /f
)
Аватара пользователя
Foreigner

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Foreigner »

Почему-то не работает...

Может я неправильно объяснил мысль - название подразделов мне неизвестны, т.е. я не могу в вашем скрипте в infsection дописать что-то от себя.

Подраздел может быть любой из диапазона 0000-NNNN
Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Почему-то не работает...

Может я неправильно объяснил мысль - название подразделов мне неизвестны, т.е. я не могу в вашем скрипте в infsection дописать что-то от себя.

Подраздел может быть любой из диапазона 0000-NNNN
Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Не понимаю почему отличается вывод двух кодов:



setlocal enabledelayedexpansion

set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB"

for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr "%Section%\\Vid_ USBSTOR"') do (echo >> 1.txt)



setlocal enabledelayedexpansion

set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000}"

for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr "%Section%\\00 USBSTOR"') do (echo >> 1.txt)



В первом случае выдает ЦЕЛИКОМ пути, а во втором - список [имя_файла тип значение].

Уже взрыв мозга случился, помогите, пожалуйста, со скриптом.



Мне кажется, что проблема в {} во втором случае, но как ее решить - не могу понять.

Точно, проблема в фигурных скобках.
Аватара пользователя
Foreigner

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Foreigner »

Lightman123,

Если честно ничего не понял. Удалить все USBSTORE?

Попробуй так:



Код:

Код: Выделить всё

@echo off
setlocal
set "regroot=HKLM\System\CurrentControlSet\Enum\USB"
for /f "tokens=*" %%i in ('reg query "%regroot%" /v Service /s') do call:del "%%i"
goto:eof
:del
0>nul set /p="%~1" | 1>nul findstr /b "HKEY.*" && set "regpath=%~1" || set "param=%~1"
for /f "tokens=3" %%i in ("%param%") do if /i "%%i"=="USBSTOR" (
    echo reg delete "%regpath%" /v Service /f
)
Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Извините, если запутал, косноязычен Изображение .



Еще раз повторю свою проблему:



Ветка реестра HKLM\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000}

Здесь куча подразделов с именами 0000, 0001, 0002, 0003, ...

В этих подразделах (практически в каждом) есть параметр InfSection, у которого могут быть разные значения.

Нужно удалить все подразделы 0000, 0001, 0002, 0003, ..., в которых параметр InfSection=USBSTOR_BULK.



Сейчас попробую ваш скрипт переделать.
Аватара пользователя
Foreigner

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Foreigner »

Код:

Код: Выделить всё

@echo off
setlocal
for /f "tokens=*" %%i in ('reg query "hklm\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}" /v InfSection /s') do call:del "%%i"
goto:eof
:del
0>nul set /p="%~1" | 1>nul findstr /b "HKEY.*" && set "regpath=%~1" || set "param=%~1"
for /f "tokens=3" %%i in ("%param%") do if /i "%%i"=="USBSTOR_BULK" (
    echo reg delete "%regpath%" /v InfSection /f
    set "regpath="
    set "param="
)

PS. Не знаю сработает или нет reg delete.
Аватара пользователя
Lightman123

Re: CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Сообщение Lightman123 »

Спасибо!



Только не запускается - ругается, что слишком много параметров в командной строке.

Как мне кажется, ругается на /v и /s в одной строке.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»