【问题标题】:Extract part of a text file using Windows batch使用 Windows 批处理提取文本文件的一部分
【发布时间】:2023-03-07 11:14:01
【问题描述】:

我有一个文本文件,但我只想要其中的一部分, wordA 和 wordB 之间包含的所有内容

是否可以使用 cmd 批处理文件?

【问题讨论】:

标签: windows file batch-file text cmd


【解决方案1】:

这使用了一个名为 repl.bat 的辅助批处理文件,来自 - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855

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

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

【讨论】:

  • @btidba 查看您问题的答案。
【解决方案2】:

当“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

【讨论】:

    【解决方案3】:

    这是一种方法。假设 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
    

    【讨论】:

    • 您好,非常感谢您的回答。不幸的是,我错过了指定 WordA 和 WordB 不会在同一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多