使用批处理dos提取文本文件的一部分

时间:2013-02-23 16:43:48

标签: file text batch-file dos

我有一个文本文件,我有兴趣只有一部分, wordA和wordB之间包含的所有内容

使用dos批处理文件可以吗? 非常感谢。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

这使用了来自 - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855

的名为repl.bat的帮助程序批处理文件

repl.bat放在与批处理文件相同的文件夹中。

@echo off
type infile |repl ".*wordA(.*)wordB.*" "$1" >outfile

答案 3 :(得分:0)

我可能会因为要求澄清而受到批评,但...... 您提供的2个文件中的哪一个是您正在使用的文件? 两者都不是文本文件。 究竟什么是“wordA”和“wordB”?