iT邦幫忙

0

透過batch抓取文件內的資訊並記錄

資料夾內有數個log檔 (EX:111.log 222.log 333.log ...)
各log的內容大概如下

XXXXX XXXXXXXX XXXXXXXXX
XXXXX ID : AAEEBB XXXXX
XXXXX XXXXX XXXXX

希望可以透過batch抓取 ID後的碼(AAEEBB 假設為6碼)
然後依序存到test.txt 內如下

111 AAEEBB
222 CCDDEE
333 GGHHJJ

不曉得大約這樣的內容該如何編寫..
請求教導,先謝謝幫忙

蟹老闆 iT邦大師 1 級 ‧ 2018-11-19 11:49:20 檢舉
你做到什麼步驟?可以POST你的給大家研究一下如何完善.
Howie iT邦新手 5 級 ‧ 2018-11-19 23:47:47 檢舉
最後我慢慢修改試出來了
謝謝
Howie iT邦新手 5 級 ‧ 2018-11-19 23:49:00 檢舉
內容大致如下
@echo on
for /f %%a in (1.txt) do (
find /i "ID :" %%a.log> 2.txt
for /F "skip=4 TOKENS=2 delims=:" %%i IN (2.txt) DO (SET ID=%%i
echo %%a %%i>>3.txt)
)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
蟹老闆
iT邦大師 1 級 ‧ 2018-11-20 01:48:53
最佳解答

內容大致如下
@echo on
for /f %%a in (1.txt) do (
find /i "ID :" %%a.log> 2.txt
for /F "skip=4 TOKENS=2 delims=:" %%i IN (2.txt) DO (SET ID=%%i
echo %%a %%i>>3.txt)
)

以上的收錄結果應該是:%%a AAEEBB XXXXX
因為使用 delims=: 取代了原本的空格分割符號,以這個需求來說應該不要用 delims=:,此例不需要 : 號來進行分割,空格分割剛好符合需要的輸出樣式。

findstr 較find好使些,可以保證格式相同才收錄,使用find /i "ID :"可能遇到
ID : ADSFDSAFSDFSADFSDF ASFDFDFASD
XXXXID : AAEEBBXXXXX
因為只要有ID :就會收錄
以下是我的方法請參考:

@Echo Off
for /f "tokens=1,4" %%i in ('findstr /R /C:"\<ID : ......\>" *.log') do echo %%~ni  %%j>>Result.log

這個好處是保證格式為 ID : 後接6個任意字元的才會被收錄
find 與 findtr 一樣可一次尋找多個檔案,可以用 *.log 使步驟少一些,個人偏好findstr多一些。

那個 Set ID 是不是有特殊用途?

Howie iT邦新手 5 級 ‧ 2018-11-22 19:30:35 檢舉

是的
因為懂得語法不多所以用比較多重的指令去蒐集資訊
謝謝您提供的寫法 收穫良多~

0
eigen
iT邦新手 1 級 ‧ 2018-11-18 16:26:07

一、用 for dir 將 每個 log 檔名抓出起
EX: 111.log

二、用 for find 將 111.log 的 ID:xxxxxx 抓出來

三、將 檔名和 xxxxxx 輸出 到 test.txt

不會用 for 指令? 請google batch for

Howie iT邦新手 5 級 ‧ 2018-11-19 23:47:03 檢舉

爬了一下文加上慢慢修改OK了
謝謝

我要發表回答

立即登入回答