标题: [求助]文本排序并删类似行
[打印本页]
作者: junyee
时间: 2009-5-16 12:27
标题: [求助]文本排序并删类似行
手上有一个注册表键值列表 1.txt 。
如下
----------------------------------
Windows Registry Editor Version 5.00
HKCR\CLSID\{123-45-67-890}
HKCR\CLSID\{123-45-67-890}\InprocServer32
HKCR\CLSID\{123-45-67-987}
HKCR\SOFTWARE\ABC
HKCR\SOFTWARE\ABC\APP
HKCR\SOFTWARE\ABC\APP\CurrentVersion
HKLM\SOFTWARE\DEF\
HKLM\SOFTWARE\ABC\Main
HKCR\CLSID\{123-45-67-890}\DefautICON
.....
----------------------------------
想弄个批处理把它整理一下生成另一个文件如2.txt,达到以下效果
----------------------------------
HKCR\CLSID\{123-45-67-890}
HKCR\SOFTWARE\ABC
HKLM\SOFTWARE\DEF\
......
----------------------------------
也就是原文件里有子键(一层)的只显示母键。
也就是说从后往前数"\"以前的键不能重复显示
当然最好能按字母顺序排列最好,不过猜想是不太可能的了。。
大家动动脑筋~~~
自己试着写了一点,头都大了,离目标还远得很。。
--------------------------------------------------------------------------------
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set n=10001
set lastid=
for /f "delims=" %%i in ('type 1.txt ^|find "HK"') do (
set key=%%i
set key=!key:[=!
set key=!key:]=!
for /f "tokens=1,2,3,* delims={}" %%a in ('echo !key!') do (
if "%%b"=="" call :nokua
if not "%%b"=="" (if "%%b"=="!lastid!" (echo × ID与上个重复) else call :pro)
)
)
echo.
echo ---------------END---------------
pause>nul
exit
:pro
echo √ 发现第!n:~1!个键值
echo !key! >>Proed.txt
for /f "tokens=1,2,3,* delims={}" %%a in ('echo !key!') do set lastid=%%b
set /a n+=1
goto :eof
:nokua
echo √ 发现第!n:~1!个键值(无ID)
echo !key! >>Proed.txt
set /a n+=1
goto :eof
:end
------------------------------------------------------------------------------
只能过滤掉相邻再行的{}里面值相同的行。大家来试试,感觉难度非常大。。。
作者: tireless
时间: 2009-5-16 14:16
@echo off&setlocal enabledelayedexpansion
set last=初始化
(for /f "eol=W delims=" %%a in ('sort 1.txt') do (
set now=%%a
for %%i in ("!last!") do (
if "!now:*%%~i=!"=="!now!" (
echo %%a
set last=%%a
)
)
))>2.txt
start 2.txt