Si j'exécute cette commande simple:
E:\mytree E:\mytree\folder1 E:\mytree\folder2 E:\mytree\folder3 E:\mytree\file1.txt E:\mytree\file12.txt E:\mytree\folder1\folder.with.dots E:\mytree\folder1\folder.with.dots\file inside folder with dots.txt E:\mytree\folder3\file4.doc
6 Réponses :
MISE À JOUR: J'ai lu la question à nouveau et j'ai compris que votre exigence est différente. En regardant comment cela peut être fait, en ce moment. :)
ou dans le second cas, p> psparentpath code> contient le dossier parent. Si vous parlez de la racine comme dans E: \, vous pouvez obtenir cela en utilisant la propriété
root code>. P>
C'est l'idée que j'avais mais j'attendrai les autres conseils. :) p> p>
get-childitem $root -recurse | foreach-object -begin { $arr = @((get-item $root).fullname) } -process { $arr+= $_.fullname } -end { $arr } Using foreach-object cmdlet's begin switch, we do some work before handling the objects from get-childitem: we create an array and put the filepath of the root in there. Then for each object in the pipeline, we append its filepath to the array.Finally, we output the array to the pipeline.
@(gi e:\mytree) + @(gci e:\mytree -r) | select fullname @(..) forces the return value from each expression to be an array
Voici ma solution "vieille école" à ce problème. Pour moi, il est beaucoup plus facile d'utiliser et de lire.
# add all the file Paths to an array so the Parent can be included $ToUpdate = @() $FolderToUpdate = Get-ChildItem $DirectorytoChange -Directory foreach ($Folder in $FolderToUpdate) { #add the paths to the array $ToUpdate += $Folder.FullName } # Include the Root $ToUpdate += $DirectorytoChange foreach ($Path in $ToUpdate) { # Do stuff }
Avec cette solution $ FolderToupdate contient une gamme d'articles enfants; Vous copiez ensuite des éléments de ce tableau un à la fois du tableau $ TUPDate (bien que l'extraction de la propriété FullName). Une approche plus efficace serait $ TUPDate = @ (, $ (@ annuelsOchanger) + @ (get-childitem $ daffinertyTchanger -directory | Select-Object -expandProperty FullName) Code>.
Une autre option consiste simplement à rouler une fonction telle que ci-dessous. Vous pouvez ajouter des paramètres dans les paramètres que vous souhaitez transmettre; comme un argument -Filtre. Ici, j'ai eu du cap de l'hypothèse selon laquelle si vous utilisiez cette fonction, vous voudrez qu'il soit exécuté sur un conteneur plutôt que sur une feuille, vous voudrez recueil, et que vous souhaiteriez chercher un tas de fichiers à la fois (donner un léger Gain de performance via l'option Outbuffer). P> Ce n'est pas aussi sexy ni intelligent que d'autres solutions, mais devrait être efficace, facile à réutiliser, facile à comprendre et fonctionne pour des conteneurs vides. P> Ceci est similaire à Votre propre réponse , mais a quelques différences. P> long terme, j'ai suggéré ce Amélioration à ms. p> p>
écriture-host code> (une cmdlet Vous devez généralement éviter ) li>
SELECT-Object -Properties FULLNAME CODE> ou
SELECT-Object -ExpandProperty FullName Code> ( Les premiers créant la même sortie que votre fonction actuelle, ce dernier renvoie un éventail de chaînes tenant la valeur du nom complet). Li>
ul>