使用文本文件中的bat脚本基于单词复制行

时间:2015-09-04 10:33:20

标签: batch-file

我有一个巨大的文本文件,我只需要复制某些行。我已经写了一个蝙蝠脚本。我浏览文本文件,只考虑那些以"ResponseCode"为前缀的行。 bat文件如下:

@ECHO OFF & setlocal enabledelayedexpansion
if exist E:\output.txt del E:\output.txt
for /f "delims=" %%i in (E:\test.txt) do (
    set "line0=%%i"
    set "line=!line0:*ResponseCode=!"
    if not "!line0!"=="!line!" (
        for /f %%j in ("!line!") do set "line=%%j"
        if not defined $a!line! (
            set "$a!line!=!line!"
            (echo(!line0!) >> E:\output.txt
        )
    )
)

但是当我运行上面的脚本时,它只复制test.txt中的一行而不是预期的四行,并将其写入output.txt。如何将包含ResponseCode的所有四行复制为前缀字?

2 个答案:

答案 0 :(得分:0)

你可以这样做吗?

findstr /b ResponseCode "E:\test.txt" >>"E:\output.txt"

/ b告诉它只输出该行,如果" ResponseCode"存在于行的开头。

答案 1 :(得分:0)

findstr /L "ResponseCode" "E:\test.txt"将返回包含ResponseCode字面的所有行 通过附加>> "E:\output.txt",可以轻松地将返回的行重定向到输出文件。

以下代码解析findstr的输出并在 ResponseCode之后输出的所有内容:

setlocal EnableDelayedExpansion
rem.> "E:\output.txt"
for /F "delims=" %%L in ('findstr /L "ResponseCode" "E:\test.txt"') do (
  set "LINE=%%L" & set "LINE=!LINE:*ResponseCode=!" & echo !LINE!
) >> "E:\output.txt"
endlocal

请注意findstr执行区分大小写的搜索,因为/I 给出;但是,删除ResponseCode(通过扩展!LINE:*ResponseCode=!(第一次)出现的所有内容都是以 敏感的方式完成的!