【问题标题】:Windows batch - concatenate multiple text files into one. The text file names are stored in a listWindows 批处理 - 将多个文本文件合并为一个。文本文件名存储在列表中
【发布时间】:2019-11-04 15:44:31
【问题描述】:

我是 windows 批处理的新手 - 我想使用 windows 批处理将多个文本文件连接到一个文件中。要组合的文件在列表中指定并且可以是动态的。我有一个文件 a.txt、b.txt、c.txt .... z.txt 的目录。我需要将它们的一个子集连接成一个merged.txt 例如如果 list 是输入列表

设置列表=a f z

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

1)type *.txt > merge.txt :- 对我不起作用,因为它会合并所有文本文件。

2) 复制 a.txt+f.txt+z.txt 合并的.txt :-但这只会针对这一输入进行组合。

有人有什么想法吗?

【问题讨论】:

  • 这不是一个数组,而是一个列表(你甚至将它命名为list)。 for %%a in (%list%) do type %%a.txt >>merged.txt
  • @Stephan 感谢您指出这一点。让我将其更改为列表。你的解决方案对我有用。我不得不将 %%a 更改为 %a (请参阅 stackoverflow.com/questions/9311562/… )非常感谢!
  • 是的 - 在命令行中是 %a,但在批处理文件中是 %%a

标签: arrays windows batch-file cmd


【解决方案1】:

不知道你想如何调用你的批处理文件,所以这是悬而未决的。

但我认为你与副本 a.txt+f.txt+z.txt merge.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% 而不是 %*

【讨论】:

  • 我尝试了您的解决方案。很好,您可以动态输入要合并的文件。但就我而言,我从另一个文件中读取了要合并的文件列表,所以斯蒂芬的解决方案对我来说已经足够了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 2021-12-20
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多