带有占位符的Windows“复制”会为输出文件添加1个字节

时间:2011-08-18 09:06:29

标签: copy cmd

试试这个:

echo Test > a1.txt
copy a1.txt b.txt
copy a?.txt c.txt

文件c.txt将比b.txt大1个字节。那是为什么?

解决方法:

for %i in (a?.txt) do copy %i d.txt

d.txt将具有正确的大小。

2 个答案:

答案 0 :(得分:2)

copy /B a?.txt c.txt似乎有效。 B用于二进制,因此不会添加文件结尾字符。

答案 1 :(得分:1)

由于通配符?(即使只有一个匹配文件)和单个目标文件(使copy附加源文件),您提供了多个源文件。在此模式下,copy将源文件和目标文件视为ASCII文本文件(就像您将给定/A开关一样),因此它将附加文件尾(EOF)字符(代码dec。26 dec。= 0x1A hex。),并在(第一个)EOF字符处截断每个源文件。添加/B开关可以防止:

copy /B a?.txt c.txt

由于开关/A/B的位置很重要,因此您可以:

  • 定义在第一个文件规范之前提供开关时全局处理文件的方式:

    rem // Treat all files as binary ones:
    copy /B a.txt + b.txt c.txt
    
  • 分别更改方式:

    rem /* Treat `a.txt` as ASCII text file (default for multiple sources),
    rem    then treat `b.txt` and `c.txt` as binary files: */
    copy a.txt + b.txt /B c.txt