中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]文本排序并删类似行 上一主题 | 下一主题
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『楼 主』:  [求助]文本排序并删类似行

手上有一个注册表键值列表 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

------------------------------------------------------------------------------
只能过滤掉相邻再行的{}里面值相同的行。大家来试试,感觉难度非常大。。。

2009-5-16 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 2 楼』:  


@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


   此帖被 +1 点积分     点击查看详情   
评分人:【 junyee 分数: +1  时间:2009-5-17 02:38


2009-5-16 14:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: