請先下載 Unix 工具包
http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download
將裡面的 \usr\local\wbin\gawk.exe 解壓到 c:\windows 目錄裡
批次檔內容就可以這麼寫:
<pre class="c" name="code">gawk "{if (NR == 2) print $1,"XX",$3,$4; else print $0}" 原始檔.txt > 更改檔.txt
move /y 更改檔.txt 原始檔.txt
PS. 以上的 gawk 命令是:若第二行則更改第二欄為 XX,其它行則原封不動。
您好, 有個問題想請教, 目前小弟在寫一個batch file想針對某個文字檔做字串的更換, 剛好網路上查到您有回答過類似的問題(http://ithelp.ithome.com.tw/questions/10179681), 但我碰到一個問題關於雙引號的符號如何呈現, 例如:
原本的字串: 123 "abc def ghi"
分成四段分別為123, "abc, def, ghi", 然後我要透過batch針對這四個字串進行變更, 但我發現其中第二跟第四個字串的雙引號我不知道怎麼插入, 曾經嘗試過這樣寫:
gawk "{if (NR == 233) print "%1:",""%2","%3","%4","%5"; else print $0}" old.icf > new.icf
但卻失敗因為程式碼認不得""%2"的字串, 所以我想請您幫忙告知要如何安插雙引號到字串中? 感謝!
如果你是在 windos 命令列中執行的,可以用 sprintf(""%c\"", 34) 來印出雙引號,如下:
gawk "{if (NR == 233) print $1,sprintf(""%c\"", 34)$2,$3,$4sprintf(""%c\"", 34); else print $0}" old.icf > new.icf
感謝! 明天來試試看.
結果還是不行, 程式碼我改成這樣:
gawk "{if (NR == 233) print \" %1:\",\"%2\",\"%3\",\"%4\"; else print $0}" performance.icf > temp1.icf
gawk "{if (NR == 233) print $1,sprintf(""%c\"",34)$2,$3,$4sprintf(""%c\"",34); else print $0}" temp1.icf > temp2.icf
move /y temp2.icf performance.icf
我下command:
test.bat 99 aaa bbb ccc
一開始轉換成temp1.icf後變成:
99: aaa bbb ccc
但第二次轉換到temp2.icf後反而變成:
99: c
原本的aaa bbb ccc不見了變成c取代, 而我想要的結果是:
99: "aaa bbb ccc"
一個 gawk 就可以了:gawk "{if(NR==233) print \"%1:\",sprintf(\"%%c\", 34)\"%2\",\"%3\",\"%4\"sprintf(\"%%c\", 34); else print $0}" performance.icf > temp1.icf
成功了! 非常感謝!