2 votes

La commande de copie dans CMD copie 734 octets au lieu de 22 Mo ?

J'ai le fichier DWA_160_drv_RevB_2_2-42_all_en_20130313.zip sur le bureau. Je veux le copier sur une clé USB en utilisant CMD. J'utilise la commande copier pour le faire, mais j'obtiens des résultats bizarres, c'est-à-dire que le fichier original est environ 30 000 (!!) fois plus gros que le nouveau fichier.

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:\>

Comment est-ce possible ?... comment cela est-il possible ? La commande est exécutée avec succès mais le fichier résultant est comme une goutte d'eau dans l'océan lorsque vous comparez sa taille, et il est apparemment corrompu.

Est-ce que je fais quelque chose de mal ici ?

J'ai pensé que cela pourrait avoir à voir avec la façon dont je tape le chemin de recherche source et destination, alors j'ai ajouté des guillemets. Je ne peux pas dire que cela a aidé.

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:\>

Alors j'ai décidé d'essayer d'utiliser le nom complet du fichier source, en utilisant la fonction d'auto-complétion dans CMD pour m'assurer qu'il est correctement saisi. Et cette fois ça a marché ! Voici la commande.

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:\>

Cette fois ça a marché !?!? Comment dwa-driver2.zip est-il différent de dwa-driver.zip ? Et comment le fichier original - DWA_160_drv_RevB_2_2-42_all_en_20130313.zip - se compare-t-il à dwa-driver.zip ? Pour répondre à cela, j'ai fait une comparaison côte à côte textuelle et hexadécimale. Voir captures d'écran ci-dessous.

Que se passe-t-il exactement à la ligne 6 ? Pourquoi copie-t-il les 5 premières lignes sans problème puis reste bloqué à la ligne 6 (voir la capture d'écran de WinMerge) ? Les deux fichiers sont identiques, jusqu'à la ligne 6, et à partir de ce point aucun autre donnée n'est copiée dans le nouveau fichier. Pourquoi ? N'est-il pas permis d'utiliser des caractères génériques avec la commande copier ?

Mise à jour


Je vais simplement appeler cela un bug et utiliser la commande xcopy car elle accepte tout ce que je lui lance. Peu importe s'il y a des caractères génériques ou non. Il est malheureux que la commande xcopy ne soit pas disponible dans tous les modes de Windows et les fenêtres d'invite de commande.

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:\>

Captures d'écran


Cliquez pour agrandir.

Comparaison textuelle entre DWA_160_drv_RevB_2_2-42_all_en_20130313.zip et dwa-driver.zip :

winmerge winmerge

Différence de taille entre dwa-driver.zip et dwa-driver2.zip :

explorer

Comparaison textuelle entre dwa-driver.zip et dwa-driver2.zip dans Beyond Compare 3 :

bcompare bcompare

Comparaison hexadécimale dans Beyond Compare 3 :

bcompare

4voto

sashimiblade Points 620

La commande copy a deux comportements différents, deux façons différentes de l'utiliser.

La première est utilisée pour copier des fichiers. C'est le comportement utilisé lorsque

  • La source est un seul fichier et la cible n'est pas indiquée (le dossier actuel est la cible par défaut), c'est un chemin de dossier ou un seul fichier.

  • La source inclut des caractères génériques et la cible est aucune (dossier actuel) ou un chemin de dossier.

Le deuxième comportement est utilisé pour combiner plusieurs fichiers source en un seul fichier cible. Ce comportement est utilisé lorsque

  • La cible est un fichier et la source est une liste de fichiers séparés par un signe +.

  • La cible est un fichier et la source inclut des caractères génériques.

Votre commande, copy dwa* d:\dwa-driver.zip utilise le deuxième comportement.

ET il y a une grande différence entre le premier et le deuxième comportement. Par défaut, lors de la copie, les fichiers sont considérés comme des données binaires, mais lorsqu'ils sont combinés, ils sont considérés comme ASCII.

Dans votre cas, comme la commande est considérée comme une opération de combinaison, les fichiers sont considérés comme ASCII et le fichier résultant contient des données du fichier source jusqu'au premier caractère 0x1A (regardez dans vos hex dumps).

Vous pouvez résoudre cela en indiquant à la commande copy que l'opération doit être binaire.

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

Et cela fonctionnera comme prévu si seulement un fichier correspond au caractère générique. Si plus d'un fichier correspond, ils seront combinés dans le fichier cible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X