iT邦幫忙

1

請問如何使用BAT批次檔修改文件中資料內容

匿名 2015-12-22 09:39:3414434 瀏覽
  • 分享至 

  • xImage

請問各位
如果我想用bat更改TXT的內容

01 02 03 04
05 06 07 08
09 10 11 12

我想修改第二行第二列06改為XX
""但是06為變數""

請問有辦法改嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

15
wiseguy
iT邦超人 1 級 ‧ 2015-12-22 11:49:43
最佳解答
  1. 請先下載 Unix 工具包
    http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download

  2. 將裡面的 \usr\local\wbin\gawk.exe 解壓到 c:\windows 目錄裡

  3. 批次檔內容就可以這麼寫:

    <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,其它行則原封不動。

看更多先前的回應...收起先前的回應...
lasthero iT邦新手 4 級 ‧ 2017-08-22 17:52:00 檢舉

您好, 有個問題想請教, 目前小弟在寫一個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"的字串, 所以我想請您幫忙告知要如何安插雙引號到字串中? 感謝!

wiseguy iT邦超人 1 級 ‧ 2017-08-24 11:26:14 檢舉

如果你是在 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

lasthero iT邦新手 4 級 ‧ 2017-08-24 23:43:48 檢舉

感謝! 明天來試試看.

lasthero iT邦新手 4 級 ‧ 2017-08-25 10:34:45 檢舉

結果還是不行, 程式碼我改成這樣:

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"
wiseguy iT邦超人 1 級 ‧ 2017-08-25 17:09:51 檢舉

一個 gawk 就可以了:
gawk "{if(NR==233) print \"%1:\",sprintf(\"%%c\", 34)\"%2\",\"%3\",\"%4\"sprintf(\"%%c\", 34); else print $0}" performance.icf > temp1.icf

lasthero iT邦新手 4 級 ‧ 2017-08-25 17:51:28 檢舉

成功了! 非常感謝!

WilliamHuang
iT邦研究生 1 級 ‧ 2015-12-22 09:44:00
【**此則訊息已被站方移除**】
2
aeolus0829
iT邦研究生 4 級 ‧ 2015-12-22 10:07:00

安裝 cygwin 配合 sed 的參數寫在 bat 檔裡

我要發表回答

立即登入回答