web-dev-qa-db-fra.com

Comment utiliser correctement l'applet de commande Copy-Item pour copier des fichiers redirigés

Je construis un petit script qui devrait copier tout .Zip fichiers dans un dossier spécial appelé F:\tempzip.

Je l'ai essayé avec Copy-Item cmdlet, mais je n'ai pas réussi à le faire. Le script doit copier tous les fichiers de ce dossier (récursivement) qui sont ".Zip".

C'est la partie du script dont je parle:

get-childitem F:\Work\xxx\xxx\xxx -recurse `
   | where {$_.extension -eq ".Zip"}       `
   | copy-item F:\tempzip

Que dois-je ajouter?

13
RayofCommand

Lorsque vous redirigez des éléments vers copy-item, Vous devez lui indiquer que "F:\tempzip" Est le chemin de destination.

| Copy-Item -Destination F:\tempzip

Vous pouvez également couper la tuyauterie vers l'opérateur where en utilisant le paramètre Get-ChildItem De -filter.

Get-Childitem "C:\imscript" -recurse -filter "*.Zip" | Copy-Item -Destination "F:\tempzip"

Edit: Suppression de la boucle foreach inutile et explication mise à jour.

11
Richard

C'est beaucoup plus simple que ça. Copy-Item a son propre commutateur - Recurse. Tout ce que tu dois faire est:

Copy-Item F:\Work\xxx\xxx\xxx\*.Zip F:\tempzip -Recurse
13
Adi Inbar

Pour une raison quelconque, la récursion Copy-Item n'a pas accompli ce que je voulais, comme mentionné ici, et comment elle est documentée pour fonctionner. Si vous avez un tas de fichiers * .Zip ou * .jpg dans des hiérarchies de sous-dossiers arbitrairement profondes, et que vous souhaitez les copier dans un seul endroit (un dossier plat, ailleurs), j'ai eu plus de chance avec une commande piped impliquant Get-ChildItem . Disons que vous êtes actuellement dans le dossier contenant la racine de votre recherche:

Get-ChildItem -Recurse -Include *.Zip | Copy-Item -Destination C:\Someplace\Else

Cette commande copiera tous les fichiers et ne dupliquera pas les hiérarchies de dossiers.

5
Greg