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

问题描述:

我有一个巨大的文本文件,我只需要复制某些行。我为此写了一个蝙蝠脚本。我浏览文本文件并仅考虑那些以"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作为前缀词的所有四行?

+0

“ResponseCode”是感兴趣的第一件事情吗?有没有领先的白色空间?你想'ResponseCode' _not_被写入'output.txt'吗?信件的情况很重要吗? – aschipfl

+0

这样的行开始是特定的'“& lt; ResponseCode”'。但除了'ResponseCode'以外的其他内容可能会有所不同。这就是为什么我把它作为参考。我需要''ResponseCode''后面的数据,所以无论是否写入ResponseCode都没关系。是的,这种情况很重要,因为它是在文件中获得的。 –

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=!)的(第一次)事件在敏感的方式完成!

你可以这样做吗?

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

如果在行的开始处存在“ResponseCode”,/ b告诉它只输出行。

+0

在采取上述质疑方法之前,我已经尝试过了。在绝对没有数据的情况下返回一个空白的'output.txt' –

+0

您可以尝试针对C驱动器上的文件运行该命令吗?只是为了看看它是否是一个权限问题,当我在我的机器上测试它时,FINDSTR行确实工作。 –

+0

如果“_by针对我的C盘上的文件运行该命令”意味着运行C文件夹中存在的文件的脚本,我也是这样做的,但结果仍然保持不变。 –