Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление строк (http://forum.oszone.net/showthread.php?t=187668)

gen0m.rsw 07-10-2010 10:57 1513397

Удаление строк
 
Всем участникам форумы респект!
Вот такая проблема, пользуюсь частенько Regshot, в отчетах (.reg) всегда появляются дублирующие строки
Типа так:
[HKEY_CLASSES_ROOT\CLSID\{11C3CCDE-3BE1-4840-95BC-8063AE5CCE88}]
[HKEY_CLASSES_ROOT\CLSID\{11C3CCDE-3BE1-4840-95BC-8063AE5CCE88}]
@="ColExt Class"

А то и по три!!!
Как можно очистить автоматически удалить дубликаты, оставив лишь нижнею?

И второй вопрос как удалить(в .reg) все строки и значения начинающийся к примеру на
[HKEY_CLASSES_ROOT\CLSID\{11C3CCDE-3BE1-4840-95BC-8063AE5CCE88}]*****
Заранее спасибо!

NiOl 07-10-2010 18:49 1513760

Очень сложный вопрос для Batch-файлов - в таких файлах слишком много спецсимволов, на которых батник будет валиться. Быстро поправил старую наработку, но...
ничего не гарантирую, тестируйте и сравнивайте, но скорее всего Вам нужен WBS
Код:

@Echo off
setLocal EnableExtensions
rem Убрать строки по маске и подобрать подряд идущие одинаковые строки

set Src=*.reg
set Remove=[HKEY_CLASSES_ROOT\CLSID\{11C3CCDE-3BE1-4840-95BC-8063AE5CCE88}]

if not %1_==_ set Src="%~1"
set Remove=%Remove:\=\\%

set Line=
set File=.
for /f "tokens=1 delims=" %%F in ('dir /a /b /on %Src%') do (
set File="%%F"
del "%%~dpnF.tmp">nul 2>nul
ren "%%F" *.tmp
if %ErrorLevel%==0 (
findstr /VLC:"%Remove%" "%%~dpnF.tmp">"%%F" 2>nul
del "%%~dpnF.tmp">nul 2>nul
ren "%%F" *.tmp
for /f "UseBackQ tokens=1* delims=" %%L in ("%%~dpnF.tmp") do call :Proceed "%%L"
del "%%~dpnF.tmp">nul 2>nul
) else echo Ошибка! Файл %%F недоступен!
)
goto :end

:Proceed
set Str=%Str%%~1
shift
if not "%~1"=="" goto :Proceed
if not "%Line%"=="%Str%" echo %Str%>>%File%
set "Line=%Str%"
set Str=
exit /b

:end


amel27 08-10-2010 12:12 1514199

Цитата:

Цитата NiOl
в таких файлах слишком много спецсимволов, на которых батник будет валиться »

не так всё безнадежно... ;)
Код:

@echo off

CALL :DELE_KEY file.reg "[HKEY_CLASSES_ROOT\CLSID\{11C3CCDE-3BE1-4840-95BC-8063AE5CCE88}"
CALL :DISTINCT file.reg

EXIT

:DISTINCT
CHCP 1251 >nul& SETLOCAL DisableDelayedExpansion
(for /f "tokens=*" %%a in ('type "%~1"') do (set "$a=%%a"
  SETLOCAL EnableDelayedExpansion
    if "!$b:~-1,1!"=="\" set "$a=  !$a!"
    if /i not "!$b!"=="!$a!" (if "!$a:~,1!"=="[" echo.)& echo !$a!
  ENDLOCAL& set "$b=%%a"
))>"%~dpn0.tmp"
copy /y "%~dpn0.tmp" "%~1" >nul&& del "%~dpn0.tmp"
CHCP 866 >nul& ENDLOCAL& exit /b

:DELE_KEY
CHCP 1251 >nul& SETLOCAL DisableDelayedExpansion& set "$k=["
(for /f "delims=" %%a in ('type "%~1"') do (set "$a=%%a"
  SETLOCAL EnableDelayedExpansion
    if "!$a:~0,1!"=="[" set "$k=!$a:%~2=]!"
    if "!$k:~0,1!"=="[" (if "!$a:~,1!"=="[" echo.)& echo !$a!
  for /f "delims=" %%i in ("!$k!") do ENDLOCAL& set "$k=%%~i"
))>"%~dpn0.tmp"
copy /y "%~dpn0.tmp" "%~1" >nul&& del "%~dpn0.tmp"
CHCP 866 >nul& ENDLOCAL& exit /b

P.S. поскольку ничего не сказано про кодировку, исходный REG может быть в WIN/Unicode, а результат будет всегда в WIN-кодировке, при желании можно подправить, чтобы результат тоже был юникодовым


Время: 13:06.

Время: 13:06.
© OSzone.net 2001-