Wie bekomme ich nur Verzeichnisse mit Get-ChildItem?
Bin ich mit PowerShell 2.0 und ich will Rohrleitung aus dem alle Unterverzeichnisse eines bestimmten Weges. Der folgende Befehl gibt alle Dateien und Verzeichnisse, aber ich kann nicht herausfinden, wie man herausfiltern, die Dateien.
Get-ChildItem c:\mypath -Recurse
Ich habe versucht, mit $_.Attributes
man die Attribute aber dann weiß ich nicht, wie zu konstruieren, eine wörtliche Beispiel der System.IO.FileAttributes
zu vergleichen. In cmd.exe
es wäre
dir /b /ad /s
InformationsquelleAutor der Frage Peter Hull | 2010-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für PowerShell-Versionen kleiner 3.0:
Den
FileInfo
Objekt zurückgegebenGet-ChildItem
hat ein "Basis" - Eigenschaft,PSIsContainer
. Sie wollen nur die Elemente auszuwählen.Wenn Sie möchten, dass die raw-string als Namen der Verzeichnisse, die Sie tun können,
Für PowerShell 3.0 und mehr:
InformationsquelleAutor der Antwort xcud
In der PowerShell 3.0 ist es einfacher:
InformationsquelleAutor der Antwort iraSenthil
Wenn Sie es vorziehen Aliase verwenden
oder
To recurse Unterverzeichnisse sowie, hinzufügen
-r
option.Getestet auf PowerShell 4.0 Die PowerShell 5.0 (Windows 10) und PowerShell-Core-6.0 (Windows 10, Mac und Linux).
InformationsquelleAutor der Antwort Sachin Joseph
Ein sauberer Ansatz:
Frage ich mich, ob PowerShell 3.0 gibt es einen Schalter, gibt nur Verzeichnisse; es scheint wie eine logische Sache.
InformationsquelleAutor der Antwort Carlos Nunez
Verwenden:
InformationsquelleAutor der Antwort Marek Dzikiewicz
Aus der PowerShell v2 und höher (k steht für den Ordner, die Sie zu Beginn Ihrer Suche an):
Wenn Sie wollen einfach nur den Ordner Namen nur, und nichts anderes, ist diese:
Wenn Sie auf der Suche für einen bestimmten Ordner können Sie die folgenden. In diesem Fall, ich bin auf der Suche nach einen Ordner namens
myFolder
:InformationsquelleAutor der Antwort Bill
Weniger text erforderlich ist, mit diesem Ansatz:
InformationsquelleAutor der Antwort jyggorath
Verwenden:
Dadurch erhalten Sie eine Ausgabe des root-Struktur mit dem Ordner-Namen für Verzeichnisse nur.
InformationsquelleAutor der Antwort Wesley
Etwas besser lesbar und einfacher Ansatz könnte erreicht werden, mit dem Skript unten:
Hoffe, das hilft!
InformationsquelleAutor der Antwort Zorayr
Verwenden:
Die das folgende tut
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
InformationsquelleAutor der Antwort Marty Gomez
Akzeptierte Antwort erwähnt
einen "raw string".
Aber in der Tat Objekte vom Typ
Selected.System.IO.DirectoryInfo
zurückgegeben werden. Für raw-strings die folgenden verwendet werden können:Den Unterschied ankommt, wenn der Wert verkettet eine Zeichenfolge:
Select-Object
überraschendfoo\@{FullName=bar}
ForEach
-Betreiber erwartet:foo\bar
InformationsquelleAutor der Antwort sevenforce
Meine Lösung basiert auf der TechNet-Artikel Spaß Dinge, die Sie Tun Können, Mit das Cmdlet Get-ChildItem.
Habe ich es in mein script, und es funktioniert gut.
InformationsquelleAutor der Antwort Sarrus
Verwenden Sie diese ein:
InformationsquelleAutor der Antwort Hansli
Werden Sie verwenden möchten "Get-ChildItem" rekursiv erhalten alle Ordner und Dateien. Und dann leiten Sie die Ausgabe in eine Where-Object - Klausel, die nur die Dateien.
InformationsquelleAutor der Antwort sonjz
Antwort auf die ursprüngliche Frage konkret (mit IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Mach ich lieber Marek Lösung, obwohl (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).InformationsquelleAutor der Antwort Nico57