中国DOS联盟论坛

中国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