
[已解決]批處理怎樣修改HIVEDEFINF文本及環境限制先檢討:前天發了個求助帖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 LayoutPreload,2,0x00000002,E00E0804HKCU,Keyboard LayoutPreload,3,0x00000002,E0010804HKCU,Keyboard LayoutPreload,4,0x00000002,E0030804HKCU,Keyboard LayoutPreload,5,0x00000002,E00408042、批處理的工作目標:刪除前三行,把第五行的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了):
我測試了一下,產生的是一個空文本。另外,猜了一通代碼,大概因為我上次沒說清楚,感覺此方案似乎僅考慮了所要處理的幾行,沒考慮8000多行的批處理環境————不知我說的對不對?附件:HIVEDEF.INF原件。原件305KB,我只有上傳小于51.2KB附件的權限,壓縮成RAR格式又不允許上傳,就在RAR后面又加了個.inf擴展名,下載后刪除.inf擴展名就能解壓縮了。nclick="copycode($('code0'));">復制代碼
- @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

