假设我有两个文件(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的内容?
答案 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个参数:file1
,file2
和lineswitch
。它会将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
如果你给出一个无效的第三个参数(非正整数或者根本不是一个整数),结果将与原始的第一个文件相同:除了第四个参数(如果给出一个),所有文件将保持不变,它然后将是第一个文件的副本。
也许一些有用的链接可以帮助您理解工作:
set
命令及其/a
开关进行算术运算SetLocal EnableDelayedExpansion
和!line!
而不是%line%
的原因。FOR /F
loop或all 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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为q40715794.txt
和q40715794_2.txt
的文件,其中包含我的测试数据。
生成定义为%outfile%
的文件读取并echo
第二个文件,直到行内容与插入点匹配,然后type
第一个文件,然后读取echo
第二个文件的剩余部分。< / p>