fichiers xcopy dans un seul répertoire

21

Je voudrais utiliser xcopy sur une machine Windows pour extraire tous les fichiers avec l'extension .png dans un seul répertoire.

J'ai essayé xcopy C:\folder\*.png /s C:\png\, mais il garde les sous-répertoires dans le dossier \ (par exemple dans C: \ png, il y a C: \ png \ a \ b \ c \ img.png) dont je ne veux pas. Je veux simplement tous les .png dans C: \ png sans qu'il conserve la structure de répertoires qui était dans le dossier C: \.

bobobobo
la source

Réponses:

39

Cela peut être fait avec du bon vieux for:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

Rien d'extraordinaire.

Joey
la source
Ça marche! Vous voulez expliquer à quoi cela %fsert?
bobobobo
C'est la variable de boucle.
Joey
3
Cela n'a pas fonctionné pour moi, j'ai quelque chose à l'effet de f" was unexpected at this time. Changer %fpour %%ftravaillé. Cependant, j'exécutais cela dans un fichier de commandes: si vous utilisez la commande FOR sur la ligne de commande plutôt que dans un programme de commandes, utilisez un seul signe de pourcentage:% G au lieu de %% G. ss64.com/nt/for.html
ta.speot.is
1
Uhm, oui. C'est prévu et exactement comme vous l'avez cité. D'où viendrais votre confusion?
Joey
1
@kayleeFrye_onDeck: Pour autant que je sache, il n'y a pas de variables spéciales. La seule chose qui me vient à l'esprit est que les gens qui ne sont pas familiers forpeuvent se confondre à propos de ces deux dchoses différentes %~dd. La fordocumentation suggère d'utiliser des lettres majuscules pour les variables afin d'éviter toute confusion, mais les substitutions se distinguent toujours clairement du nom de la variable, je pense.
Joey
1

Si vous avez installé cygwin, ce serait un travail à trouver:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(même si cela aura des problèmes si l'un des noms de fichiers contient des espaces - vous trouverez cependant une variante d'une findcommande qui fonctionnera dans toutes les circonstances)

Si vous utilisez Vista, 2003 ou 2008, le "forfiles" moins flexible mais toujours utile est votre ami. Quelque chose comme:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

Remarque: Je n'ai testé aucune des commandes ci-dessus, mais en théorie, elles devraient fonctionner ...

David Spillett
la source
+1 vient de vérifier que la commande FORFILES fonctionne. Je l'ai exécuté deux fois et il a copié la deuxième fois sans invite, donc je suppose qu'il écrase juste s'il trouve des doublons.
hyperslug