![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-30 23:47 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]文本排序并删类似行 |
| 可打印版本 664 / 1 |
| 第1楼 junyee | 发表于 2009-05-16 12:27 |
| 中级用户 发帖 112 积分 253 | |
|
[求助]文本排序并删类似行 手上有一个注册表键值列表 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 ------------------------------------------------------------------------------ 只能过滤掉相邻再行的{}里面值相同的行。大家来试试,感觉难度非常大。。。 |
|
| 第2楼 tireless | 发表于 2009-05-16 14:16 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |