Windows批处理-将多个文本文件合并为一个。文本文件名存储在列表中

时间:2019-06-21 19:27:52

标签: arrays windows batch-file cmd

我是Windows批处理的新手-我想使用Windows批处理将多个文本文件连接为一个。要合并的文件在列表中指定,并且可以是动态的。我有文件a.txt,b.txt,c.txt .... z.txt的单个目录。我需要将其中的一部分连接到merged.txt中 例如,如果list是输入列表

set list = a f z

然后,我希望merged.txt具有a.text,f.txt和z.txt的内容。 我已经尝试过的想法是

1)输入* .txt> merged.txt:-对我不起作用,因为它将合并所有文本文件。

2)复制a.txt + f.txt + z.txt merged.txt:-但这仅适用于此输入。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不确定您要如何调用批处理文件,因此该消息即将发布。

但是我认为您对a.txt + f.txt + z.txt merged.txt的副本很了解

只需使用命令行参数(最多可以有9个)动态构建该列表

@echo off
set copyfiles=

for /d %%i in (%*) do call :process %%i
goto :output

:process
if "%copyfiles%" NEQ "" (
  set copyfiles=%copyfiles%+%1.txt
)
if "%copyfiles%" EQU "" (
  set copyfiles=%1.txt
)
goto :end

:output
copy %copyfiles% merge.txt

:end

然后将使用

执行
merge-them.cmd a b c f

或者您可以设置一个变量

mylist=a,b,c,f

然后您的FOR循环将引用%mylist%而不是%*

答案 1 :(得分:1)

for命令用于处理列表:

set "list=a f z"
for %%a in (%list%) do type %%a.txt >>merged.txt

注意:%%a是批处理文件语法。如果要直接在命令行上使用它,请改用%a

以下操作更快(因为它只打开目标文件一次),但是您不会注意到列表中只有几个条目(如果列表很大,它可能会快几百倍):

(for %%a in (%list%) do type %%a.txt)>merged.txt