如何将文件1到X连接到新文件比使用命令COPY并指定所有文件名更有效?

时间:2016-07-11 01:28:04

标签: file batch-file

我在一个名为W1到W80的文件夹中有80个文件。它们是文本文件,但没有.txt扩展名。无论如何,如果我想要组合或连接W1到W35(80个中的35个文件),我可以运行写入所有35个文件名

copy W1 + W2 + W3 .... + W35 "New file"

批处理文件中是否有更好的方法可以说明copy W1 through W35 "New file"而不是长途跋涉?

我应该在命令行输入什么内容?

3 个答案:

答案 0 :(得分:2)

由于文件名中的数字不是零填充,因此它们的字母排序将与其数字排序不同。由于使用copy按字母顺序排序的通配符(如使用sort.exe一样),因此纯批处理语言的最佳选择是使用for /L循环来构建副本列表。

信徒使用type进行重定向的解决方案可能是最简单的解决方案,尽管它应该缩短为单行并且重定向应用于整个循环:

>merged.txt (for /L %%n in (1,1,35) do type W%%n)

这将避免打开,写入和关闭输出文件35次。

将文件排序为整数值需要使用不同的脚本语言。这是一个PowerShell示例:

gci W* | ?{ $_ -match '\d+' -and [int]$matches[0] -le 35 } | sort @{
    Expression = { [int][RegEx]::Match($_, '\d+').Value }
} | gc | out-file merged.txt

正如您所看到的,将文件名的数字部分视为整数并对其执行数字排序和数学比较并非完全不复杂。

答案 1 :(得分:1)

面条'答案也不限于W1到W35 - 问题表明目录中有80个文件。

试试这个:

echo.>W
for /L  %%n in (1,1,35) do type W%%n>>W

这应该将前35个文件按顺序合并到一个名为W的新文件中,如果W应该已经存在,它将首先被清空。

以上内容适用于.BAT文件。如果键入命令行,请在两个位置使用%n而不是%% n。

答案 2 :(得分:0)

来自MSDos 6.22帮助

  

使用COPY命令组合文件

     

如果指定多个源,请使用加号分隔条目   (+),COPY组合文件,创建单个文件。 如果您使用通配符   在源中但在目标中指定单个文件名,COPY组合所有   与源文件名匹配的文件,并使用。创建单个文件   目的地中指定的文件名。

     

在任何一种情况下,COPY都假定组合文件是ASCII文件,除非你   指定/ B开关。 (如果没有指定,请不要合并非ASCII文件   / B开关;这样做会导致截断文件,因为大多数是二进制文件   文件包含CTRL + Z字符,这会导致COPY表现得像它一样   到达文件的末尾。)

     

如果目标文件的名称与其中一个名称相同   正在复制的文件(第一个文件除外),原始内容   目标文件丢失。发生这种情况时,COPY显示以下内容   消息:

Content of destination lost before copy 

帮助示例页面中给出的示例

  

复制* .txt Combin.doc