【问题标题】:Batch file to Copy particular lines from one text file to another text file批处理文件将特定行从一个文本文件复制到另一个文本文件
【发布时间】:2013-04-23 05:57:06
【问题描述】:

我对批处理脚本非常陌生。我对批处理脚本了解不多。

我的疑问是如何仅将某些行从文本文件复制到其他文本文件。

假设我的 File.txt 是

This is sample file.
I want copy this line.
Also this line.
But not this line.

我想复制第 2 行和第 3 行,但不使用它们的行号,因为可能会改变。

到目前为止我已经做了这么多:

@ECHO OFF
SET InFile=abc.txt
SET OutFile=Output.txt
IF EXIST "%OutFile%" DEL "%OutFile%"
SET TempFile=Temp.txt
IF EXIST "%TempFile%" DEL "%TempFile%"

IF EXIST "%OutFile%" DEL "%OutFile%"

FOR /F "tokens=*" %%A IN ('FINDSTR "I want" "%InFile%"') DO (
    ECHO.%%A> "%TempFile%"
    ECHO.%TempFile%>>"%OutFile%"
REM CALL :RemovePrecedingWordA "%%A"
    )
FOR /F "tokens=*" %%A IN ('FINDSTR " Also this" "%InFile%"') DO (
    ECHO.%%A> "%TempFile%"
    ECHO.%TempFile%>>"%OutFile%"
REM CALL :RemovePrecedingWordA "%%A"
    )

但它不起作用。请帮忙。

【问题讨论】:

    标签: windows batch-file text copy


    【解决方案1】:

    你可以使用 /g: 选项来查找字符串,基本上可以

    findstr /g:pattern.txt %InFile% > %OutFile%
    

    pattern.txt 在哪里(在您的示例中)

    I want
    Also this
    

    这假设您可以为要复制的所有行编写 findstr 正则表达式。

    如果您将 findstr 与多个文件(通配符)一起使用,您将获得附加的文件名。要解决这个问题,请使用 del out.txt for %F in (*.txt); do findstr /g:pattern.txt %F >> out.txt 请注意,您应该将源文件放在与模式和输出文件不同的目录中(或使用不同的扩展名),否则 *.txt 通配符也会选择这些文件。

    【讨论】:

    • 嗨彼得,有没有办法在使用通配符“c:*.txt”时删除文件路径。我的输出将显示“c:\test.txt: Blablabla”而不是“Blablabla”。提前致谢。
    • @Nyc2x 并不简单,但请参阅我的帖子的编辑 - 这就是您的意思吗?否则,问一个新问题可能会更好。
    【解决方案2】:

    您也可以为此目的使用sed。某些行(在本例中为 2 和 3)复制如下:

    sed -n -e 2p -e 3p input.txt > output.txt
    

    如果您想复制一段行(从第 2 行到第 10 行的所有行),那么您可以使用:

    sed -n -e 2,10p input.txt > output.txt
    

    或者您也可以使用某些线条和线段的组合:

    sed -n -e 2,10p -e 15p -e 27p input.txt > output.txt
    

    【讨论】:

    • 问题说明:“但不使用他们的行号,因为可能会改变。”
    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多