如何使用批处理脚本在特定行的另一个文件中添加一个文件的内容?

时间:2016-11-21 08:35:03

标签: batch-file

假设我有两个文件(file1.txt& file2.txt)。

file1.txt的内容是

line number 4
line number 5
line number 6

file2.txt的内容是

line number 1
line number 2
line number 3
line number 7
line number 8

如何在第3行之后在file2.txt中添加file1.txt的内容?

2 个答案:

答案 0 :(得分:2)

Magoo几乎已经给了你一个答案,但是如果你真的想要给一个亚麻布而不是该系列的内容你可以使用它:

@echo off
SetLocal EnableDelayedExpansion

set file1=%~1
set file2=%~2
set lineswitch=%~3

IF [%file1%] == [] goto :wrongUsage
IF [%file2%] == [] goto :wrongUsage
IF [%lineswitch%] == [] goto :wrongUsage

IF [%~4] == [] (
    set out=%file1%
) ELSE (
    set out=%~4
)

REM Create temporary file to copy content of file1
set tmpfile=%temp%\lineshrink_cpy.tmp
copy %file1% %tmpfile% > nul

REM clear output-file
type nul > "%out%"

set /a line=0
FOR /F "tokens=* usebackq" %%G IN ("%tmpfile%") DO (
    set /a line+=1
    IF !line! EQU %lineswitch% (
        type "%file2%" >> "%out%"
    )
    echo %%G >> "%out%"
)

REM Delete tempfile
del %tmpfile%
EndLocal
exit /b 0

:wrongUsage
echo SYNTAX: APPENDER.BAT file1 file2 lineswitch [output]
EndLocal
exit /b 1

此批处理脚本至少需要3个参数:file1file2lineswitch。它会将file2插入file1,从第lineswhitch行开始(基于1的计数)。因此,file2的第一行将成为lineswitch中的行号file1(第二行将是行号lineswitch + 1,依此类推,......)。如果您不希望file1更改但是您希望将结果放在另一个文件中,只需将该文件作为第四个参数。第四个参数是附加的,但要小心并且包含带双引号空格的环绕路径!

如果您将该脚本放在文件appender.bat中,并将其与文件(file1.txt和file2.txt)一起使用,如下所示:

>appender.bat file2.txt file1.txt 4 file3.txt

最终会更改file1.txt和file2.txt以及包含以下内容的file3.txt:

line number 1
line number 2
line number 3
line number 4
line number 5
line number 6
line number 7
line number 8

另一方面,如果你这样使用它:

>appender.bat file2.txt file1.txt 4

你最终会改变file1.txt,但file2.txt将是:

line number 1
line number 2
line number 3
line number 4
line number 5
line number 6
line number 7
line number 8

如果你给出一个无效的第三个参数(非正整数或者根本不是一个整数),结果将与原始的第一个文件相同:除了第四个参数(如果给出一个),所有文件将保持不变,它然后将是第一个文件的副本。

也许一些有用的链接可以帮助您理解工作:

  • this one说明如何使用set命令及其/a开关进行算术运算
  • this one是关于延迟扩张的。我在这里使用它是因为FOR循环被视为一个命令(就像写在一行上一样)并且你不能改变/设置变量的值并从同一行读取新值。这就是我在循环中使用SetLocal EnableDelayedExpansion!line!而不是%line%的原因。
  • 如果您想了解有关the FOR /F loopall loops that exist in batch
  • 的更多信息
祝你好运!

答案 1 :(得分:1)

copy file1.txt+file2.txt file3.txt
sort file3.txt >file4.txt

输出file4.txt

---修订目标

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q40715794.txt"
SET "filename2=%sourcedir%\q40715794_2.txt"
SET "outfile=%destdir%\outfile.txt"
SET "insertafter=line number 3"
(
FOR /f "usebackqdelims=" %%a IN ("%filename2%") DO (
 ECHO %%a
 IF "%%a"=="%insertafter%" TYPE "%filename1%"
)
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q40715794.txtq40715794_2.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

读取并echo第二个文件,直到行内容与插入点匹配,然后type第一个文件,然后读取echo第二个文件的剩余部分。< / p>