iT邦幫忙

0

windows批次(BAT)使用for中的變數疑問?

功能:把 ABC.TXT 的內容中文字"keyword"以上所有行內容擷取,以下行內容皆排除。擷取出來存至另一份文件OK.TXT。(注意:ABC.TXT中keyword這一行內容可能是:keyword1122xxx、keywordzzzz,不會只是單純keyword)
我用for /f方式去run,但keyword的判斷不知道要如何改寫,我用不合法的寫法: %i:~0,7%
煩請各位高手幫幫忙,謝謝。

for /f "delims=" %%i in (ABC.TXT) do (
if keyword==%i:~0,7% (set k=%i:~0,7%
echo %k%>>"OK.TXT" 
goto getout) else (echo %%i>>"OK.TXT")
)
:getout
如果不限定要用變數的話
這樣寫比較快
findstr "keyword" abc.txt > ok.txt

打嗑睡
elliott iT邦新手 5 級 ‧ 2011-10-05 19:28:21 檢舉
findstr單純把"keyword"這一行的內容抓出來,可是我需要的內容是keyword以上行所有(包含keyword這個字)的內容囧
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
wiseguy
iT邦超人 1 級 ‧ 2011-10-05 20:02:28
最佳解答

你的需求如果是在 Linux 裡,用 sed 做就太 ..... 簡單了。
請去抓一個 UnxUtils 工具包
http://sourceforge.net/projects/unxutils/
裡面有個 usr\local\wbin\sed.exe 拿出來用。
只要下
sed "1,/keyword.*/!d" ABC.txt > OK.txt
就是你要的結果了

看更多先前的回應...收起先前的回應...
elliott iT邦新手 5 級 ‧ 2011-10-05 21:00:07 檢舉

我以前有稍微接觸過Red-hat的shell script,linux要達到這個功能非常容易
可是我需要的是windows的batch
汗

krarm iT邦好手 1 級 ‧ 2011-10-05 21:11:11 檢舉

樓上大大是要你去抓windows版的sed

wiseguy iT邦超人 1 級 ‧ 2011-10-06 00:20:24 檢舉

我知道你要在 windows 底下的 batch 裡執行啊~
所以要你去抓 windows 用的 sed
把 sed 指令放在 batch 檔裡
就可以達到你要的功能不是嗎?

elliott iT邦新手 5 級 ‧ 2011-10-12 13:25:40 檢舉

我是希望不要透過其他程式來達成,不過還是謝謝了

6
krarm
iT邦好手 1 級 ‧ 2011-10-05 19:55:16

elliott提到:
keyword的判斷不知道要如何改寫

keyword的判斷===>可以用一個又一個的字元來判斷。

我要發表回答

立即登入回答