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?

CleverPatrick
la source
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

FastEthernet
la source
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
1
Voir aussi commentaire sur SO .
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

Paul Andres Pedroza M
la source
-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Fonctionnerait également.

Mark Gladson
la source
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