2016-02-21 174 views
0

我需要從2個分隔符之間的文件中提取文本,並將其複製到TXT文件中。此文本看起來像XML代碼,而不是分隔符<string> text... </string>,我有:::SOURCE text .... ::::SOURCE。正如你在第一個分隔符中看到的是':'的3倍,而在第二個是':'的4倍。批處理 - 使用分隔符從文件中提取文本

最重要的是在這兩個分隔符之間有多行。文本的

實施例:

texttexttexttexttexttexttexttexttext 
texttexttexttext 
:::SOURCE 
just this text 
just this text 
just this text 
just this text 
... 
just this text 
::::SOURCE texttext 
texttexttext 

希望的輸出:

just this text 
just this text 
just this text 
just this text 
... 
just this text 
+0

如果你的目標是湊一個日誌文件,注意,批量處理大量的日誌文件是無效的,即使使用有效的方法在批處理腳本中。您將從流讀取器獲得更好的性能,例如[GNU'awk'](http://gnuwin32.sourceforge.net/packages/gawk.htm)。請看看[我過去的掙扎](http://stackoverflow.com/questions/15628017/),所以你不會註定要重複它們。我很確定我已經經歷了你現在正在經歷的事情。 – rojo

+0

@ rojo ca請你提交這個例子的GNU版本? – Andy

+0

你實際上可以用一個班輪來完成,而不需要腳本。 'awk「/^::: SOURCE/{flag = 1; next}/^ :::: SOURCE/{flag = 0}標記」txtfile.txt「會執行此操作。 ([信貸到這篇文章](http://stackoverflow.com/a/17988834/1683264)) – rojo

回答

1

嘗試這種情況:

@echo off 
setlocal enabledelayedexpansion 
if exist srcoutput.txt (break > srcoutput.txt) 
set found= 
set markpoint=false 
set /a count=0 
set /a two=2 
for /f "tokens=* delims= " %%a in (source.txt) do (
    if !count! equ %two% goto :EOF 
    echo %%a | findstr /c:":SOURCE" >nul 
    if errorlevel 1 ( 
      set found=false 
      if "!markpoint!"=="true" (
      echo %%a >> srcoutput.txt 
      ) 
     ) else ( 
       set found=true 
      ) 

    if "!found!"=="true" (
     set /a count=count+1 
     set /a division=!count!%%%two% 
     if !division! equ 0 (
     set markpoint=false 
    ) else (
     set markpoint=true 
     ) 
    ) 

) 
:EOF 

對於輸入文件的Source.txt其中包含:

texttexttexttexttexttexttexttexttext 
texttexttexttext 
:::SOURCE 
just this text 
just this text 
just this text 
just this text 
... 
just this text 
::::SOURCE texttext 
:::SOURCE 
just this text 
just this text 
just this text 
just this text 
... 
just this text 
::::SOURCE texttext 
texttexttext 
:::SOURCE 
just this text 
just this text 
just this text 
just this text 
... 
just this text 
::::SOURCE texttext 

在srcoutput.txt輸出看起來像:

just this text 
just this text 
just this text 
just this text 
... 
just this text 
+0

感謝svasa的回覆。也許我錯過了什麼,但不幸的是這與不: 'texttexttexttexttexttexttexttext texttexttexttexttext文本 ::: SOURCE 文本 文本 文本 文本 ... 文本 :::: SOURCE 文字文字文字'這個文本有多行.... – Andy

+0

我更新了'示例'並添加了'所需輸出'以更好地理解。 – Andy

+0

你應該從一開始就這樣做! '::: SOURCE'和':::: SOURCE'分隔符是否總是放在行首(如你的例子中)? – Aacini

相關問題