我有一個批處理腳本,它將整行搜索字符串打印到文本文件中。批處理腳本在文本文件中打印搜索字符串的前一行和下一行
for %%i in (log.txt) do (
FINDSTR /G:pattern.txt %%i >> output.txt
)
實施例: pattern.txt包含搜索字符串ERROR
和下面是在log.txt的示例文本
2013-06-30 02:17:55,562 INFO Service started
2013-06-30 02:17:55,578 INFO Sending mail...
2013-06-30 02:17:55,578 DEBUG Element value: 1
2013-06-30 02:17:55,578 ERROR error occurred and message is ""
2013-06-30 02:17:55,578 DEBUG bit version: 8
2013-06-30 02:17:55,578 INFO Service stopped
上述批次腳本將打印的每一行文本每當找到字符串ERROR
在log.txt中那麼,output.txt中看起來有像下面
2013-06-30 02:17:55,578 ERROR error occurred and message is ""
線如何打印唯一一次和下一行搜索字符串如下:
2013-06-30 02:17:55,578 DEBUG Element value: 1
2013-06-30 02:17:55,578 DEBUG bit version: 8
在此先感謝。
增加了兩行來產生output.txt'rem爲/ F「tokens = 1 * delims =:」%% a行搜索行 ('findstr/N「^」log.txt^| findstr/B「 %數字%「')do( \t if %% a ==%before%>> output.txt echo %% b \t if %% a ==%%>> output.txt echo %% b ) '適用於多個搜索字符串,如「發生錯誤」。但只打印最後一次出現。在實時場景中,搜索字符串會出現多次。沒有使用第三方工具可以實現嗎? – Shrik
原始代碼搜索所有出現的字符串。你沒有測試過嗎?如果你想產生output.txt文件,只需用這種方法把最後一行括起來:'('original last line')> output.txt'。我已經修改了上面這種方式的代碼... – Aacini
真棒Aacini。抱歉。我修改生成output.txt文件的代碼只搜索最後一次出現。你最新的代碼工作正常。 – Shrik