Удаление строк
Всем участникам форумы респект!
Вот такая проблема, пользуюсь частенько 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}]*****
Заранее спасибо!
|
Очень сложный вопрос для 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
|
Цитата:
Цитата 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.
© OSzone.net 2001-