【问题标题】:Batch script to merge files using copy command in numerical order使用复制命令按数字顺序合并文件的批处理脚本
【发布时间】:2016-02-23 00:42:11
【问题描述】:

如果有人可以帮助我解决这个请求,我们将不胜感激。

我需要一个动态批处理脚本,它可以对任意数量的文件执行以下命令:

Copy 1.txt + 2.txt + 3.txt + 4.txt newfile.txt

问题是,如果我有以下文件:

1.txt

2.txt

3.txt

...等等

我尝试:Copy *.txt newfile.txt 合并时排序不正确。

它实际上最终会这样做:Copy 3.txt + 4.txt + 2.txt + 1.txt newfile.txt

另外,我需要它来使用 copy 命令而不是 type 命令。

我找不到正确的方法,因为大多数在线 FOR 循环示例都使用 TYPE,这不适合我想要实现的目标。

非常感谢您的帮助!

【问题讨论】:

  • 您很快就会发现批处理文件中列出的文件不会按数字顺序排序。文件将以 1.txt 10.txt 2.txt 等形式出现。您将需要一个额外的实用程序来按您想要的顺序获取文件。我建议您使用 Dave Benham 的 JSORT 实用程序。 dostips.com/forum/viewtopic.php?f=3&t=5595
  • @Squashman:你可能是对的......
  • Dostips.com 上还有一个 SORTN.BAT 实用程序。同样,您需要将 DIR 命令的结果通过管道传输到此批处理文件,然后捕获输出以构建您的复制命令。 dostips.com/?t=Batch.SortTextWithNumbers
  • 请注意,像这样的命令行的长度是有限的,我认为是 8192 字节......另一件事:是否有 .txt 文件带有前导零,如 01.txt

标签: batch-file cmd copy


【解决方案1】:

试试下面的脚本:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET _cmd=COPY
FOR /F %%G IN ( 'DIR /O:N /B *.txt' ) DO (
    SET _cmd=!_cmd! %%G +
)
SET _cmd=!_cmd:~0,-2! newfile.txt
ECHO !_cmd!

脚本是“惰性的”,因为它输出完成的命令行,但实际上并没有发出它。删除最后一行的ECHO 以激活它。

【讨论】:

  • 谢谢,但这仍然不能按正确的顺序工作。还是按这个顺序合并的:3.txt 4.txt 2.txt 1.txt
  • @binaryfinary:太尴尬了,我错过了包含排序标志...已为此修复。但是,如果您的文件达到 2 位数范围,您将看到 Squashman 已经暗示的问题......
  • 你太棒了!完全按照需要工作。谢谢!
猜你喜欢
  • 2013-06-03
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多