首先我要说的是,我是批处理文件编程的新手。也就是说,我想合并两个文件,我从以下代码开始:
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(第二个文件)的全部内容,加上一个额外的行终止符。