Powershell Copy-Item récursivement mais n'inclut pas le nom du dossier


19

C'est une question stupide, mais je ne sais tout simplement pas pourquoi cela ne fonctionne pas.

J'essaie de copier les fichiers du dossier A vers le dossier B de manière récursive. Je fais ça:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

Cela fonctionne très bien, pas de problème.

Sauf que le résultat dans FolderB est le suivant:

C:\FolderB\FolderA\file.txt

Alors que je veux que ce soit:

C:\FolderB\file.txt

Quelle chose évidente stupide me manque?


4
Vous ne faites rien de stupide, la copie n'est qu'un PITA.
StingyJack

Réponses:


27

Votre commande indique à PowerShell de copier le dossier lui-même, avec tout son contenu, dans le dossier de destination. Pour copier uniquement le contenu du dossier d'origine, modifiez votre chemin d'accès comme suit:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

Notez l'astérisque (*) après le nom du dossier. Cela copiera le contenu (y compris les sous-dossiers) du dossier, mais pas le dossier lui-même dans le dossier de destination.

Utilisation de l'applet de commande Copy-Item


2
Notez que cela ne copie pas la structure du dossier si le dossier de destination n'existe pas. Appeler md "C:\FolderB"avant Copy-Itemsemble éviter ce problème.
zett42

En s'appuyant sur le commentaire de @ zett42 ci-dessus, si le dossier de destination n'existe pas déjà, il semble Copy-Itemreproduire la structure du dossier, mais un niveau plus bas (par exemple, il C:\FolderA\B\Cest copié à la C:\FolderB\Cplace de C:\FolderB\B\C), et peut également échouer lorsque plusieurs sous-dossiers existent. Assurez-vous toujours que le dossier de destination existe avant d'appeler Copy-Item. Cela sent comme un bogue (je ne vois aucune raison pour laquelle ce comportement incohérent serait souhaitable).
Marc Durdin


0

Vous pouvez utiliser -File -Recurse pour copier uniquement des fichiers de manière récursive:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -File -recurse -Force -Verbose

Ou utilisez -Directory -Recurse pour copier uniquement la structure du dossier empy:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -Directory -recurse -Force -Verbose

Sincères amitiés,

Paul Pedroza


-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Fonctionnerait également.


1
Cela semble être un commentaire sur la réponse similaire de FastEthernet. Si vous souhaitez proposer une autre réponse, vous devez expliquer pourquoi elle répond à la question.
Blackwood

Cela crée C: \ FolderB s'il n'existe pas - mais crée C: \ FolderB \ FolderA si C: \ FolderB existe. Si vous exécutez cette commande deux fois, vous pouvez obtenir deux copies de tout dans des emplacements légèrement différents! Tellement de douleur.
Lamarth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.