使用DOS COPY命令与通配符一起使用会破坏目标文件

7
我不理解使用通配符时COPY命令的行为。我在目录下有一个名为的文本文件,想将其复制到目录下。这是批处理脚本所需的,我无法确切知道的确切名称(例如可能是)。目标文件名应该是mpt.asm。
如果使用以下命令:
COPY C:\Source\mpt*.asm C:\Dest\mpt.asm

文件已经被复制,但是文件末尾多了一个额外的字符 (0x1A)。

如果我使用:

COPY C:\Source\mpt*.asm C:\Dest\mpt.asm /B

我不理解这个伪字符。
如果我不使用通配符,我也不会得到这个伪字符。看起来COPY没有bug,但这种行为似乎出人意料。
有没有一种方法可以在不使用/B的情况下进行复制?
1个回答

6
我以前从未见过这种情况,但对于我来说它确实会添加一个额外的箭头字符。
您可以使用xcopy绕过此问题。
echo f| xcopy C:\Source\mpt*.asm C:\Dest\mpt.asm

如果你阅读 copy /?,它会说:
要附加文件,请为目标指定一个单个文件,但对于源,请指定多个文件(使用通配符或 file1+file2+file3 格式)。
因此,通过在目标中使用单个文件名,在源中使用通配符,可能会将其解释为追加,这可能是额外字符的作用,但由于你没有附加任何内容,所以你可以看到它。
我只是猜测,但那可能可以解释它。

2
你是对的,这是由于copy在追加模式下工作。多出来的1A字符来自DOS;它曾经是标记文本文件EOF所必需的。/B指定二进制文件可以避免这个问题。http://www.tech-archive.net/Archive/Win2000/microsoft.public.win2000.cmdprompt.admin/2009-08/msg00010.html - sourcejedi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接