先检讨:
前天发了个求助帖http://www.bathome.net/thread-10307-1-1.html,因为标题不符合论坛规则,被锁了。在此向论坛道歉,新来的不懂规矩,请原谅。本人支持论坛的管理规则。
那个帖子发的仓促,的确有问题:一是标题不明确(已经改了一下),二是内容有错误,把HIVEDEF.INF写成了HIVESYS.INF(也改了),三是对处理文本的环境没描述清楚。锁了也不冤。只是对帮助解决问题的寒夜孤星朋友更表歉意。
再提问题:
修改HIVEDEF.INF文本的实际情况有点复杂:
1、HIVEDEF.INF的文本很长,共有8000多行。它里面有3个[addreg]段,要修改的内容属于第3个[addreg]段的第二部分。如果连空行也算行的话,这部分内容在第3个[addreg]段下数从第12行开始,至第15行截止。内容为:
HKCU,"Keyboard Layout\Preload","2",0x00000002,"E00E0804"
HKCU,"Keyboard Layout\Preload","3",0x00000002,"E0010804"
HKCU,"Keyboard Layout\Preload","4",0x00000002,"E0030804"
HKCU,"Keyboard Layout\Preload","5",0x00000002,"E0040804"
2、批处理的工作目标:删除前三行,把第五行的"5"改成"2"。
3、要删除和修改行中有"2",、"3",、"4",、"5",这样的特征值——必须给数字加上前后引号"",后面再跟一个,号,才可以作为该行的特征值,在整个文本中具有唯一性,否则其他行中有的也有只加""号不跟,号的"2"、"3"、"4"、"5"。
修改文本的初步设想(不知道思路对不对,是不是有更好的办法):
1、全文检索,查找"2",、"3",、"4",、"5",特征值。
2、如果某行没有特征值,就输出到新文本中;
3、见到"2",、"3",、"4",就删除它所在的行(删除后不给它留下空行);
4、见到"5",就把它改成"2",。然后输出到新文本中。
修改文本的水平太菜,自己实在做不出来,再求朋友们帮忙。
寒夜孤星朋友给了一个批处理解决方案(这里把HIVESYS.INF改成HIVEINF.INF了):- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* HIVEDEF.INF') do if "%%b"=="" (echo/) else (
- set/a a+=1
- if !a!==1 echo %%b
- if !a!==5 for /f "tokens=1-3* delims=," %%c in ("%%b") do echo %%c,%%d,"2",%%f
- ))>temp.h
- del /q HIVEDEF.INF
- ren temp.h HIVEDEF.INF
复制代码 我测试了一下,产生的是一个空文本。另外,猜了一通代码,大概因为我上次没说清楚,感觉此方案似乎仅考虑了所要处理的几行,没考虑8000多行的批处理环境————不知我说的对不对?
附件:HIVEDEF.INF原件。原件305KB,我只有上传小于51.2KB附件的权限,压缩成RAR格式又不允许上传,就在RAR后面又加了个.inf扩展名,下载后删除.inf扩展名就能解压缩了。 |