我是批处理脚本的新手。我对Batch Scripting知之甚少。
我的疑问是如何只将一些行从文本文件复制到其他文本文件。
说我的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"
)
但它不起作用。请帮忙。
答案 0 :(得分:7)
您可以对findstr使用/ 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
通配符也会选择这些文件。
答案 1 :(得分: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