Ich verwende PowerShell 2.0 und möchte alle Unterverzeichnisse eines bestimmten Pfads weiterleiten. Der folgende Befehl gibt alle Dateien und Verzeichnisse aus, aber ich kann nicht herausfinden, wie die Dateien herausgefiltert werden.
Get-ChildItem c:\mypath -Recurse
Ich habe versucht $_.Attributes
, die Attribute zu verwenden, aber dann weiß ich nicht, wie ich eine Literalinstanz erstellen soll, mit der ich sie System.IO.FileAttributes
vergleichen kann. Darin cmd.exe
wäre
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
quelle
quelle
In PowerShell 3.0 ist es einfacher:
quelle
dir
war ein AliasGet-ChildItem
, und die-Directory
und-File
Optionen funktionierten wie beschrieben. Ich verwendete Befehleecho $PSVersionTable
,help dir
,dir -Directory
unddir -File
mit diesem Kommentar zu kommen.ls
unddir
sind Aliase derGet-ChildItem
Auswahl Ihres GiftesVerwenden
Wenn Sie Aliase bevorzugen, verwenden Sie
oder
Fügen Sie die
-r
Option hinzu, um auch Unterverzeichnisse zu rekursieren .Getestet unter PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac und Linux) und PowerShell 7.0 (Windows 10, Mac und Linux).
Hinweis : In PowerShell Core werden Symlinks nicht befolgt, wenn Sie den
-r
Switch angeben . Geben Sie den-FollowSymlink
Schalter mit an, um Symlinks zu folgen-r
.Hinweis 2 : PowerShell ist seit Version 6.0 plattformübergreifend. Die plattformübergreifende Version hieß ursprünglich PowerShell Core, aber das Wort "Core" wurde seit PowerShell 7.0+ entfernt.
Get-ChildItem-Dokumentation: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
quelle
Ein sauberer Ansatz:
Ich frage mich, ob PowerShell 3.0 einen Schalter hat, der nur Verzeichnisse zurückgibt. es scheint eine logische Sache zu sein, hinzuzufügen.
quelle
-Directory
und-File
Flags hinzuVerwenden:
quelle
Ab PowerShell v2 und neuer (k steht für den Ordner, in dem Sie mit der Suche beginnen):
Wenn Sie nur Ordnernamen und nichts anderes möchten, verwenden Sie Folgendes:
Wenn Sie nach einem bestimmten Ordner suchen, können Sie Folgendes verwenden. In diesem Fall suche ich nach einem Ordner mit dem Namen
myFolder
:quelle
Bei diesem Ansatz ist weniger Text erforderlich:
quelle
Verwenden:
Dadurch erhalten Sie eine Ausgabe der Stammstruktur mit dem Ordnernamen nur für Verzeichnisse.
quelle
Verwenden:
Welches macht das Folgende
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
quelle
Ein etwas lesbarerer und einfacherer Ansatz könnte mit dem folgenden Skript erreicht werden:
Hoffe das hilft!
quelle
Sie sollten Get-ChildItem verwenden, um zuerst rekursiv alle Ordner und Dateien abzurufen . Und dann leiten Sie diese Ausgabe in eine Where-Object- Klausel weiter, die nur die Dateien übernimmt.
quelle
Die akzeptierte Antwort erwähnt
um einen "rohen String" zu bekommen. Tatsächlich werden jedoch Objekte vom Typ
Selected.System.IO.DirectoryInfo
zurückgegeben. Für rohe Zeichenfolgen kann Folgendes verwendet werden:Der Unterschied ist wichtig, wenn der Wert mit einer Zeichenfolge verknüpft ist:
Select-Object
überraschendfoo\@{FullName=bar}
ForEach
-operator das erwartete:foo\bar
quelle
Select-Object -ExpandProperty FullName
Meine Lösung basiert auf dem TechNet-Artikel Lustige Dinge, die Sie mit dem Cmdlet Get-ChildItem tun können .
Ich habe es in meinem Skript verwendet und es funktioniert gut.
quelle
Verwende das hier:
quelle
So beantworten Sie die ursprüngliche Frage speziell (mithilfe von IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Ich bevorzuge jedoch Mareks Lösung (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).quelle