gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:40:29 25 4
gpt4 key购买 nike

假设我有两个文件(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的内容?

最佳答案

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 中,从行号 lineswitch 开始(从 1 开始计数)。所以 file2 的第一行将成为 file1 中的行号 lineswitch (第二行将是行号 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 loop 的信息或关于 all loops that exist in batch

祝你好运!

关于batch-file - 如何使用批处理脚本将一个文件的内容添加到特定行的另一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com