我有一个文本文件,我有兴趣只保留其中一部分,wordA和wordB之间包含的所有内容
使用dos批处理文件可以吗?非常感谢。
这里是一种方法。假设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”不在同一行时,这是一种方法。它将输出发送到Output.txt。这将是输入文件中第一个“ wordA”和第一个“ wordB”之间的文本(区分大小写)。您没有指定单词A / 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
这使用来自-repl.bat
的名为http://www.dostips.com/forum/viewtopic.php?f=3&t=3855的帮助程序批处理文件>
将repl.bat
与批处理文件放在同一文件夹中。
@echo off
type infile |repl ".*wordA(.*)wordB.*" "$1" >outfile
您好,我试图找到使这些代码正常工作的方法,但我不确定自己缺少什么