2011年9月24日 星期六

DOS指令操作: CMD與TXT的互動

今天研究的是如何用cmd在既有的 txt 檔案內以關鍵字的方式對整行內容做操作。
例:
ming.txt
有一天,小明、小華、小美一起坐飛機出去玩,
但是飛機故障了,機上只有兩個降落傘,
小明搶了一個跳了下去,可是小華卻一直笑,
小美說:已經剩下一個降落傘了妳還笑得出來,
小華說:小明拿到我的書包了。

我的需求是要設定可自訂的多個關鍵字來對整行操作 如: 刪除所有含關鍵字的一整行內文。


關於寫入操作

for /f "tokens=*" %a in (22.txt) do echo %a>11.txt
for /f "tokens=*" %a in (22.txt) do echo %a>>11.txt

上面兩行的差別是,">" 會以新內容將舊內容覆蓋;">>" 為將新內容續寫至舊內容下。
若11.txt不存在則創建它。

for /f "tokens=*" %a
以 for 進行迴圈並對內容逐行操作,tokens=* 意思是對該行所有段落都執行,最後將執行結果存入變數 %a。

in (22.txt)
括號內限定 for 做迴圈的範圍,如檔名含有空格則須以雙引號括住。
do echo %a>11.txt

do 後指示要對先前的 %a 進行什麼操作,echo %a>11.txt 意思是將 in 中的範圍傾印至 11.txt 中。

關於過濾操作
在尋找方法時發現 find 加上參數 /v 可以過濾掉含有關鍵字的行數;
如我輸入 find /v "小華" ming.txt
則將輸出:
---------- MING.TXT
但是飛機故障了,機上只有兩個降落傘,
小美說:已經剩下一個降落傘了妳還笑得出來,
將 find /v 加上輸出的寫法為:
for /f "tokens=*" %a in ('find /v "小華" "ming.txt"') do @echo %a>>result.txt
輸出的結果會是將不含"小華"的行數寫入 result.txt 中。

結果
找了一下午對多關鍵字比對還是沒有頭緒,只好上網找能達到相同結果的軟體幫忙,
後來找到 Text Filter
介紹:
Text Filter 實用的文字檔案內容搜尋及過濾工具(免安裝)


Text Filter 提供三種搜尋方式,Navie Query 就是我們現在常用的關鍵字模式。




在切換成正規表示式後就能在上方的搜尋欄以 "|" 符號來設定多組關鍵字。




最後再在 View 將選項調成 Hide Unmatched Lines 就能達成篩選的目的!




設定完關鍵字後可以在 File>Export>Filter results 將結果匯出成文字檔。





有个.txt文本里的内容是
123
123
123
用什么命令可以让它变成
1234a
1234a
1234a


@echo off
set b=4a
for /f "delims=" %%i in 1.txt do echo %%i%b%>>"%userprofile% \D:\1.txt

參考引用:
cmd如何修改文件?  - 裡面討論到延時啟動與文件內容存入變數的寫法。
BAT:批處理教學(上) - 要寫成 bat 會用到的一些語法教學
BAT:批處理教學(下) - 組合指令(&) 與管道指令( | )  好像用這個就能達成今天的目標!
                                               改天再來研究!

沒有留言:

張貼留言