La copie par lot donne des erreurs, xcopy fonctionne bien

1

J'écris un programme général de sauvegarde de fichiers. Il recherche sur le lecteur les fichiers correspondant à un ensemble de types, puis les écrit dans un dossier du bureau. Je l'ai écrit en utilisant xcopyWindows XP, mais après avoir appris que l' utilisation de ce logiciel xcopyétait déconseillée dans robocopyVista et les versions plus récentes, tout en maintenant la compatibilité, j'ai décidé de passer à la version non obsolète copy.

C'est là que les problèmes commencent. J'essaie de réparer la routine de copie. Je pensais avoir tout réglé, mais cela ne copie rien. Ma sortie est zéro fichier copié pour chaque itération.

Code original utilisant xcopy:

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   echo f | xcopy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /q /y /g /c
)

Code révisé (cassé) en utilisant copy:

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)

Sortie:

The system cannot find the path specified.
    0 files copied.

Je sais qu'il semble que tout le monde utilise l'un xcopyou l' autre, robocopymais est-ce que quelqu'un peut aider copy?

Remarque: J'utilise Batch pour le maintenir très léger et accessible en ligne de commande.

ndm13
la source
vous pourriez trouver le problème si vous insérez le mot «écho» avant le mot «copie». Et cela peut clarifier les choses si vous collez un @ ici @foret ici do @( qui devrait lister toutes les commandes et vous pouvez voir le moindre défaut. Je remarque également qu'il vous manque des guillemets doubles dans votre commande de copie. Vous les aviez dans votre commande xcopy
barlop
juste une suggestion, pensez que cela fonctionnerait un peu plus facilement avec "forfiles". Par exemple: forfiles / pc: \ / s / m * .bmp / ​​c "cmd / c copie @file"% HOMEDRIVE %% HOMEPATH% \ Desktop \ LDR \ Images \ Bitmap \ %% ~ nxa "plus d'infos ici -> ss64.com/nt/forfiles.html
Dévier le
@barlop Désolé, c'est une révision que j'ai publiée. Celui que je pensais être totalement correct est maintenant. J'ai attrapé mon erreur après l'avoir posté.
ndm13
1
D:\>(copy "D:\Program Files\Winamp\Plugins\avs\whacko6-07.bmp" "C:\Documents and Settings\,,,,\Desktop\LDR\Images\Bitmap\whacko6-07.bmp" /d /y /z ) The system cannot find the path specified. 0 file(s) copied.Un échantillon sur un lecteur d'essai D. Les résultats étaient tous les mêmes.
ndm13
1
Solution trouvée. Je posterai la réponse quand StackExchange me le permettra. Pour l'enregistrement, copyne crée pas de chemins de fichiers, il n'a donc pas été copié dans un chemin qui xcopyaurait été créé pour moi. Je devrais pré-créer mes répertoires.
ndm13

Réponses:

0

Solution enfin trouvée!

Apparemment, xcopycrée des répertoires s'ils ne sont pas spécifiés. Je n'avais pas déjà \LDR\Images\Bitmapdéfini le chemin de fichier. copyJe ne sais pas comment créer des dossiers, je vais donc devoir les générer à l'avance, ce qui est un peu gênant car xcopycela ne créerait pas de dossiers s'il n'y avait pas de fichiers à mettre dans ceux-ci. Avec copyje fais des dossiers en supposant qu'ils seront remplis.

Merci pour l'aide. FOR THE RECORD: copyne crée pas de chemins de fichiers inexistants. xcopyEst-ce que!

MISE À JOUR: Ma solution finale. Fonctionne comme un champion.

for /r %%a in (*.bmp *.dds *.gif *.jpg *.jpeg *.png *.psd *.pspimage *.tga *.thm *.tif *.tiff) do (
   if not exist "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\" (md "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\")
   copy "%%a" "%HOMEDRIVE%%HOMEPATH%\Desktop\LDR\Images\Bitmap\%%~nxa" /d /y /z
)
ndm13
la source