copy
当在源中使用通配符(*?)并指定输出名称时,会创建一个几乎为空(1K)的文件。
copy /D /V *?ample.png %homepath%/example.png
它适用于某些文件类型(.txt .rtf)
copy /D /V *?ample.txt %TEMP%\example.txt
有趣的是,源和目标中的通配符解决了这个问题,
copy "*xample.pdf" "%TEMP%/*xample.pdf"
但弄乱了文件名,它变成:示例.pdf
这是一个 Bug 还是坏的句法?我困惑了。
我对 Windows 7 x86_64
相关问题
使用 wildard 和 DOS COPY 命令会损坏目标文件
如何在 Windows 中使用通配符复制文件而不附加任何内容?
答案1
我认为这是一个(误用)功能。
我的 Windows 10help copy
提示:
要附加文件,请为目标指定单个文件,但为源指定多个文件(使用通配符或 file1+file2+file3 格式)。
如果文件格式不支持简单连接的源文件,则用户需要记住这一点。
还巴厘岛的答案您的第一个链接完全回答了您的问题。
如果只有一个名称不清楚的源文件,则可以使用不同的解决方法:
for %A in (*?ample.png) Do copy "%A" "%homepath%/example.png"
答案2
使用通配符有一个问题... 您将(可能)许多文件复制到一个目标中,多次无用地覆盖这个可怜的文件 :)。但是,它确实带来了这个有趣的“功能”。我很想拿出我的 DOS 软盘来检查这个错误是否已经存在很久了。
恭喜你发现了 DIR 中这个有趣的错误!复制的文件最终被损坏。它非常一致,不依赖于 /D /V 开关,并且仅在反复覆盖同一文件时发生。使用 xcopy 时不会出现此错误,这对所有 Windows 用户来说都是个好消息。
答案3
copy
必须知道文件的类型:“ASCII 文本”/A
或“二进制文件”/B
二进制文件/B
除非您正在合并文件,否则会假定如此。
但是当您在源中放置通配符并指定输出名称时,Windows 会“假定”您正在合并文件,并使用“ASCII 文本”解释器,从而生成一个 1K 的空文件。
所以/B
在所有非“ASCII 文本”文件中
,在指定输出名称的源中使用通配符时,必须使用 参数(表示二进制文件) 。
copy /B /D /V *?ample.png %homepath%/example.png
称其为 Bug,一个愚蠢的 Microsoft 功能,但事实就是这样。