更新

更新

我的桌面上有文件 DWA_160_drv_RevB_2_2-42_all_en_20130313.zip。我想使用 CMD 将其复制到 USB 闪存驱动器。我使用复制命令来执行此操作,但得到了奇怪的结果,即原始文件比新文件大约大 3 万倍(!!)。

C:\Users\Sam\Desktop>
C:\Users\Sam\Desktop>dir dwa*
 Volume in drive C is Vista (ST1PT1)
 Volume Serial Number is D27C-,,,,

 Directory of C:\Users\Sam\Desktop

2013-10-10  11:56        23 324 179 DWA_160_drv_RevB_2_2-42_all_en_20130313.zip
               1 File(s)     23 324 179 bytes
               0 Dir(s)   3 318 292 480 bytes free

C:\Users\Sam\Desktop>copy dwa* d:\dwa-driver.zip
DWA_160_drv_RevB_2_2-42_all_en_20130313.zip
        1 file(s) copied.

C:\Users\Sam\Desktop>d:

D:\>dir
 Volume in drive D is CRUZER
 Volume Serial Number is 0085-,,,,

 Directory of D:\

2013-10-10  13:41               734 dwa-driver.zip
               1 File(s)            734 bytes
               0 Dir(s)   2 050 744 320 bytes free

D:\>

怎么会这样?...怎么可能?命令成功完成,但生成的文件大小跟大海里的一滴水相比简直是小巫见大巫,显然已经损坏。

我在这里做错什么了吗?

我认为这可能与我输入源和目标搜索路径的方式有关,所以我添加了引号。我不能说这有帮助。

D:\>c:

C:\Users\Sam\Desktop>copy "dwa*" "d:\dwa-driver.zip"
DWA_160_drv_RevB_2_2-42_all_en_20130313.zip
Overwrite d:\dwa-driver.zip? (Yes/No/All):
        0 file(s) copied.

C:\Users\Sam\Desktop>d:

D:\>c:

C:\Users\Sam\Desktop>copy "dwa*" "d:\dwa-driver.zip"
DWA_160_drv_RevB_2_2-42_all_en_20130313.zip
Overwrite d:\dwa-driver.zip? (Yes/No/All): y
        1 file(s) copied.

C:\Users\Sam\Desktop>d:

D:\>dir
 Volume in drive D is CRUZER
 Volume Serial Number is 0085-,,,,

 Directory of D:\

2013-10-10  13:56               734 dwa-driver.zip
               1 File(s)            734 bytes
               0 Dir(s)   2 050 744 320 bytes free

D:\>

因此,我决定尝试使用源文件的全名,并利用 CMD 中的自动完成功能确保输入正确。这次成功了!这是命令。

D:\>c:

C:\Users\Sam\Desktop>copy DWA_160_drv_RevB_2_2-42_all_en_20130313.zip d:\dwa-d
river2.zip
        1 file(s) copied.

C:\Users\Sam\Desktop>d:

D:\>dir
 Volume in drive D is CRUZER
 Volume Serial Number is 0085-,,,,

 Directory of D:\

2013-10-10  13:56               734 dwa-driver.zip
2013-10-10  11:56        23 324 179 dwa-driver2.zip
               2 File(s)     23 324 913 bytes
               0 Dir(s)   2 027 417 600 bytes free

D:\>

所以这次成功了!?!?dwa-driver2.zip 与 dwa-driver.zip 有何不同?原始文件 - DWA_160_drv_RevB_2_2-42_all_en_20130313.zip - 与 dwa-driver.zip 相比如何?为了回答这个问题,我进行了并排的文本和十六进制比较。请参见下面的屏幕截图。

第 6 行到底发生了什么?为什么复制前 5 行没有问题,然后卡在第 6 行(参见 WinMerge 屏幕截图)?两个文件都是相同的,直到第 6 行,从那以后不再将数据复制到新文件。为什么?我不允许在复制命令中使用通配符吗?

更新


我将其称为错误并使用 xcopy 命令,因为它接受我向其输入的任何内容。是否有通配符并不重要。不幸的是,xcopy 命令并非在 Windows 和命令提示符窗口的所有模式下都可用。

D:\>c:

C:\Users\Sam\Desktop>xcopy dwa* d:\dwa-driver3.zip
Does D:\dwa-driver3.zip specify a file name
or directory name on the target
(F = file, D = directory)? f
C:DWA_160_drv_RevB_2_2-42_all_en_20130313.zip
1 File(s) copied

C:\Users\Sam\Desktop>d:

D:\>dir
 Volume in drive D is CRUZER
 Volume Serial Number is 0085-,,,,

 Directory of D:\

2013-10-10  13:56               734 dwa-driver.zip
2013-10-10  11:56        23 324 179 dwa-driver2.zip
2013-10-10  11:56        23 324 179 dwa-driver3.zip
               3 File(s)     46 649 092 bytes
               0 Dir(s)   2 004 090 880 bytes free

D:\>

截图


单击可查看大图。

DWA_160_drv_RevB_2_2-42_all_en_20130313.zip 与 dwa-driver.zip 之间的文本比较:

温合并 温合并

dwa-driver.zip 和 dwa-driver2.zip 之间的大小差异:

探索者

Beyond Compare 3 中 dwa-driver.zip 和 dwa-driver2.zip 之间的文本比较:

比较 比较

Beyond Compare 3 中的十六进制比较:

比较

答案1

copy命令有两种不同的行为,两种不同的使用方式。

第一个用于复制文件。这是在

  • 源只有一个文件,目标未指明(默认当前文件夹为目标),它是一个文件夹路径或只有一个文件。

  • 源包含通配符,而目标为无(当前文件夹)或文件夹路径

第二种行为用于将多个源文件合并为一个目标文件。此行为用于以下情况:

  • +目标是一个文件,源是一个由符号分隔的文件列表

  • 目标是一个文件,源包含通配符

您的命令copy dwa* d:\dwa-driver.zip使用第二种行为。

第一个行为和第二个行为之间有很大区别。默认情况下,复制时文件被视为二进制数据,但合并文件时它们被视为 ASCII。

在您的情况下,由于该命令被视为组合操作,因此文件被视为 ASCII,并且生成的文件包含源文件中直到第一个0x1A字符的数据(查看您的十六进制转储)

您可以解决此问题,指示命令copy操作必须是二进制的

copy /b dwa* d:\dwa-driver.zip

如果只有一个文件与通配符匹配,此操作将按预期工作。如果多个文件匹配,则它们将合并为目标文件。

相关内容