2013-02-23 39 views
2

我有一個文本文件,我有興趣只有一個使用DOS批處理的一部分, 所有包含wordA和wordB提取一部分使用批處理DOS

之間是什麼可能檔案? 非常感謝。

+1

是的,這是可能的。你有什麼嘗試?文件的內容是什麼? – 2013-02-23 17:01:40

+0

如果這是關於解析一個XML文件,看看這些問題:[從批處理腳本解析XML時意外的字符](http://stackoverflow.com/questions/12956694/),[如何批量解析xml文件(CMD)](http://stackoverflow.com/questions/11014319/),[如何提取使用Windows批處理特定XML標記屬性的所有實例](http://stackoverflow.com/questions/11141337/) – 2013-02-25 22:19:57

回答

2

以下是一種方法。假設wordA和wordB在同一行(都必須存在)。 該子例程:FindString刪除不需要的前面的文本,然後用我們不期望在文本中我們將用作分隔符(在本例中爲``)的字符替換「wordB」。如有必要,請使用其他角色

@ECHO OFF 
SET InFile=Test.txt 

FOR /F "tokens=*" %%A IN ('FINDSTR "wordA" "%InFile%" ^| FINDSTR "wordB"') DO CALL :FindString "%%A" 
pause 
GOTO :eof 

:FindString 
SET String=%~1 
SET String=%String:*wordA =% 
SET String=%String: wordB=`% 
FOR /F "tokens=1 delims=`" %%A IN ('ECHO.%String%') DO ECHO.%%A] 
GOTO :eof 
+0

你好,非常感謝你的回答。不幸的是,我錯過了指定WordA和WordB不在同一行。 – user2102732 2013-02-24 08:16:40

1

當「wordA」和「wordB」不在同一行時,可以這樣做。它將輸出發送到Output.txt。這將是輸入文件中第一個「wordA」和第一個「wordB」之間的文本(區分大小寫)。如果有多個(或不匹配)的wordA/B集合,您沒有指定要執行的操作。

:RemoveWordB用我們不希望在文本中將會用作分隔符(在本例中爲``)的字符替換「wordB」。如有必要,請使用其他角色

@ECHO OFF 
SET InFile=Test.txt 
SET OutFile=Output.txt 
IF EXIST "%OutFile%" DEL "%OutFile%" 
SET TempFile=Temp.txt 
IF EXIST "%TempFile%" DEL "%TempFile%" 

FOR /F "tokens=*" %%A IN ('FINDSTR /N "wordA" "%InFile%"') DO (
    CALL :RemovePrecedingWordA "%%A" 
    FOR /F "tokens=1 delims=:" %%B IN ('ECHO.%%A') DO (
     MORE +%%B "%InFile%"> "%TempFile%" 
     FINDSTR /V "wordB" "%TempFile%">> "%OutFile%" 
     FOR /F "tokens=*" %%C IN ('FINDSTR "wordB" "%InFile%"') DO (
     CALL :RemoveWordB "%%C" 
     IF EXIST "%TempFile%" DEL "%TempFile%" 
     GOTO :eof 
     ) 
    ) 
    ) 
GOTO :eof 

:RemovePrecedingWordA 
SET String=%~1 
SET String=%String:*wordA =% 
ECHO.%String%> "%OutFile%" 
GOTO :eof 

:RemoveWordB 
REM Replace "wordB" with a character that we don't expect in text that we will then use as a delimiter (` in this case) 
SET LastLine=%~1 
SET LastLine=%LastLine:wordB=`% 
FOR /F "tokens=1 delims=`" %%A IN ('ECHO.%LastLine%') DO ECHO.%%A>> "%OutFile%" 
GOTO :eof 
0

我可能會響起了詢問澄清,但是...... 您提供的2個文件是您正在使用的文件? 兩者都不是文本文件。 「wordA」和「wordB」究竟是什麼?

+0

試圖插入我的評論,但它總是被禁止。對不起,不明白爲什麼 – user2102732 2013-02-26 17:36:30