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

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

Ответить
Настройки темы
CMD/BAT - Удаление строк

Аватара для gen0m.rsw

Пользователь


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

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


Всем участникам форумы респект!
Вот такая проблема, пользуюсь частенько 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}]*****
Заранее спасибо!

Отправлено: 10:57, 07-10-2010

 

Старожил


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

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


Очень сложный вопрос для 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

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 18:49, 07-10-2010 | #2



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

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


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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать??? VladZombie Скриптовые языки администрирования Windows 70 08-09-2020 13:28
CMD/BAT - [решено] Перенос и удаление строк из текстового файла sk8ter Скриптовые языки администрирования Windows 15 03-10-2010 19:35
Удаление строк из регфайла... semiono AutoIt 4 21-01-2010 11:06
MySQL - Максимаотное количество строк Jonik-Mnimonik Программирование и базы данных 11 17-06-2008 08:40
Сложение строк на PHP Vlad Drakula Вебмастеру 1 08-06-2003 21:30




 
Переход