Copier les dossiers sans les fichiers, les fichiers sans dossiers, ou tout à l'aide de PowerShell
J'aimerais être capable d'écrire un script PowerShell qui prendrait un dossier (ou un ensemble de dossiers) et de les dupliquer dans lequel la structure de dossier (sans les fichiers) pourrait être créé, où la structure du fichier (sans les dossiers) pourrait être créé, ou dans lequel les deux fichiers (tous ou ceux sélectionnés) ET dossiers pourraient être créés.
Example:
C:\ProdData has 3 subfolders in it
C:\ProdData\Fld1
C:\ProdData\Fld2
C:\ProdData\Fld3 - has 2 subfolders under it
C:\ProdData\Fld3\MyFolder1
C:\ProdData\Fld3\MyFolder2
Chaque dossier ci-dessus a un divers nombre de fichiers de différentes tailles, de différentes extensions de fichier.
J'aimerais avoir un script PowerShell qui ferait double emploi structure de dossier ailleurs, en me donnant un choix de Structure de Dossier Seulement, Uniquement les Fichiers de, ou des Fichiers ET des Dossiers à être copié.
Ci-dessus, j'aimerais être en mesure de copier C:\ProdData dans un autre dossier, essentiellement renommer ProdData à TestData (qui est, C:\ProdData copié à C:\TestData), ou de copier le dossier complet de la structure.
C:\ProdData
dans un autre dossier, qui est un sous-dossier de quelque chose d'autre: C:\TestArea\TestFolders\2012-04-01\TestData\ProdData\Fld1
, etc...
Et de choisir de façon sélective afin d'inclure des dossiers, des fichiers ou les deux.
La solution idéale serait d' (pour les dossiers prenez la structure du dossier, l'exportation et de l'enregistrer, de lire et de créer la même structure ailleurs. Quelques solutions que j'ai trouvé dit ils ont copié le dossier seulement la structure, mais s'il existe des données, qui est copié aussi et que vous ne pouvez pas exclure l'un ou l'autre. J'ai une solution partielle pour les fichiers seule exigence que les semi-conserves le chemin, mais il faudrait un fichier:
c:\ProdData\Fld1\MyFile.dat
et copie à:
c:\TestData\yyyyMMdd_hhmmss_ProdData_Fld1_MyFile.dat
Mais ce n'est pas quelque chose qui pourrait facilement être décodé et serait impossible à ré-intégrer la structure source. J'apprécierais des idées sur la façon de le faire sans avoir à ré-inventer la roue.
OriginalL'auteur steve_o | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
De tout copier dans un dossier hierarchie
À la copie de la hierarchie, vous pouvez essayer:
Pour aplatir une structure de fichier, vous pouvez essayer:
Bonne chance!
OriginalL'auteur Reinout
Voici quelques idées pour le traitement de chaque situation que vous décrivez.
Structure De Dossier Seulement
Cela va copier la source vers une destination, recursing sous-répertoires, mais à l'exclusion de tous les fichiers.
Fichiers Uniquement (Aplatir La Structure)
Il ya quelques façons de gérer cette situation, mais je n'en connais pas un particulièrement bon ou de manière élégante. Voici une idée saugrenue, mais efficace - pour chaque sous-répertoire, il exécute un non-récursive copie à la racine du dossier de destination. La critique ou la plus agréable des variantes seront la plupart de bienvenue.
Tout
Ce scénario est le plus simple de la grappe.
Vous pouvez expérimenter avec les commutateurs de vous-même (référencement
robocopy /?
le long du chemin) pour affiner le processus. La plus délicate de la scénario, à mon avis, est celui qui aplatit la structure de répertoire. Vous aurez des décisions à prendre, comme la façon dont vous souhaitez gérer le même nom de fichier apparaissant dans plusieurs répertoires.Comme pour comment faire pour accepter les options de la ligne de commande, je vous suggère de mettre ensemble Powershell ensembles de paramètres pour vos trois situations. Il y a un certain nombre de messages de blog autour de que de discuter le concept, mais vous pouvez également voir TechNet ou exécuter
help about_Functions_Advanced_Parameters
à l'intérieur de Powershell.Pour l'aplatir un, vous pouvez passer à la section du milieu, et il suffit d'utiliser l'option du Fichier à Get-ChildItem (et la Copie de l'Élément au lieu de robocopy): Get-ChildItem $source -Recurse -Fichier | Foreach-Object { Copie-Item $_.FullName $dest }. Pas une énorme différence.
Bon point. Aussi longtemps que vous êtes sur Powershell 3 vous pouvez certainement le faire (le
-File
et-Directory
paramètres n'existait pas jusqu'à ce que la v3).OriginalL'auteur ajk
Je propose ma solution :
OriginalL'auteur Esperento57