2

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

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

说我的 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"
    )

但它不起作用。请帮忙。

4

2 回答 2

7

您可以使用 /g: 选项来查找str,基本上可以

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通配符也会选择这些文件。

于 2013-04-29T14:20:01.850 回答
1

您也可以为此目的使用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
于 2015-08-19T10:41:28.580 回答