Имя пользователя:
Пароль:
 

Название темы: Удаление строк
Показать сообщение отдельно

Googler


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

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


Цитата 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-кодировке, при желании можно подправить, чтобы результат тоже был юникодовым

Последний раз редактировалось amel27, 09-10-2010 в 11:32. Причина: мелкая оптимизация

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

Отправлено: 12:12, 08-10-2010 | #3

Название темы: Удаление строк