批量:按特定顺序合并两个文件

批量:按特定顺序合并两个文件

首先我要说的是,我是批处理文件编程的新手。也就是说,我想合并两个文件,我从以下代码开始:

copy Test1.sol + Test2.sol Test.sol /B

这段代码只是将 Test2.sol 的内容放在 Test1.sol 的底部,这不是我想要的。相反,我想将 Test2.sol 的内容放在 Test1.sol 中的特定位置。

为了更清楚一点,假设 Test2.sol 的内容为:

401 TEXT1  12345       123444
401 TEXT2  12345       123444
401 TEXT3  12345       123444

Test1.sol的内容为:

**********************
**     HEADER 1     **
**********************

Message1
Message2

**********************
**     HEADER 2     **
**********************

**********************
**     HEADER 3     **
**********************

Message3
Message4

我怎样才能将 Test1.sol 的内容放在 Test2.sol 的 HEADER 2 下 - 就像其他消息一样?

提前致谢!

答案1

最好的办法是将文件分解。

如果你不想打破它,你需要很多这样的回声

@echo off
@echo ********************** >results.txt
@echo **     HEADER 1     ** >>results.txt
@echo ********************** >>results.txt
type value1.txt >>results.txt

1.txt

**********************
**     HEADER 1     **
**********************

消息1

消息2

h2.txt

**********************
**     HEADER 2     **
**********************

h3.txt

**********************
**     HEADER 3     **
**********************

消息3

消息4

type h1.txt >results.txt
type value1.txt >>results.txt
type h2.txt >results.txt
type value2.txt >>results.txt
type h3.txt >results.txt
type value3.txt >>results.txt

显然,您可以根据需要添加任意数量的部分。剩下的唯一技巧就是将原始列表分成单个文件。

虽然不清楚每个标题下的内容,但我将展示一个例子。

find "401 " values.txt >values1.txt
find "402 " values.txt >values2.txt
find "403 " values.txt >values3.txt

这可能有效。

答案2

有一个“简单”的单行解决方案JREPL.BAT - 正则表达式命令行查找/替换文本处理实用程序。JREPL.BAT 是纯脚本(混合批处理/JScript),可在 XP 及以上版本的任何 Windows 机器上本地运行 - 无需第三方 exe 文件。可通过命令行获取完整文档jrepl /?,或jrepl /??获取分页帮助。

jrepl "^" "stdin.readAll()+'\r\n'" /j /inc "/^\*\*     HEADER 2     \*\*$//+3" /f test1.sol /o test.sol <test2.sol

解释一下它的工作原理,逆向思考(有点):

  • /f test1.sol指定主输入文件。
  • /o test.sol指定要创建的输出文件。
  • <test2.sol将第二个文件作为标准输入提供。
  • /inc "/...//+3"指定查找/替换仅发生在
    第一个“Header 2”行之后的第三行。正斜杠之间的文本是正则表达式。
  • /j指定将替换参数解释为 JScript。
  • "^"find 参数是与行首匹配的正则表达式。
  • "stdin..."replace 参数是一个 JScript 表达式,其计算结果为 stdin(第二个文件)的全部内容,加上一个额外的行终止符。

相关内容