Comment faire pour copier certains fichiers (w/o hiérarchie des dossiers), mais ne pas remplacer les fichiers existants?

J'ai besoin de copier tous les *.doc fichiers (mais pas les dossiers dont les noms correspondent à *.doc) à partir d'un dossier réseau \\server\source (y compris les fichiers dans tous les dossiers imbriqués) dans un dossier local C:\destination sans conserver les dossiers imbriqués de la hiérarchie (c'est à dire tous les fichiers doivent aller directement dans C:\destination et pas de dossiers imbriqués doit être créé dans C:\destination). Dans le cas où il y a plusieurs fichiers avec le même nom dans différents sous-dossiers de \\server\source, seul le premier devrait être copié et jamais écrasé puis — toutes les fichiers trouvés plus tard doit être ignoré (il pourrait y avoir de nombreux cas de ce genre, et les fichiers ignorés ne doit pas être trasferred sur le réseau, sinon cela prendrait trop de temps). Voici ma tentative de le mettre en œuvre dans PowerShell:

cp \\server\source\* -Recurse -Include *.doc -Container:$false -Destination C:\destination

Il y a au moins deux problèmes avec cette commande:

  • Il copie les dossiers dont les noms correspondent à *.doc trop.
  • En cas de conflit de noms de n'importe quel fichier trouvé, plus tard, est transféré sur le réseau et remplace la précédente.

Pouvez-vous suggérer comment résoudre ces problèmes?

Implémentations utilisant copy, xcopy, robocopy, cscript ou *.bat, *.cmd sont également les bienvenus.

Les locaux OS est Windows 8 et le système de fichiers est NTFS.

Quel est le comportement attendu si le script s'exécute deux fois? Faut-il encore copiez tout à la fois? Ou faut-il la copie rien?
Le répertoire de destination peut être supposé initialement vide. Si cette condition préalable échoue, alors le comportement du script peut être indéfini.

OriginalL'auteur Vladimir Reshetnikov | 2013-07-05