it-swarm.com.de

Rufen Sie den vollständigen Pfad der Dateien in PowerShell ab

Ich muss alle Dateien abrufen, einschließlich der Dateien in den Unterordnern, die zu einem bestimmten Typ gehören.

Ich mache so etwas mit Get-ChildItem :

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}

Es werden jedoch nur die Dateinamen und nicht der gesamte Pfad zurückgegeben.

107
Gagan

Fügen Sie am Ende Ihrer Zeile | select FullName hinzu. Wenn Sie danach tatsächlich etwas unternehmen müssen, müssen Sie es möglicherweise in eine foreach-Schleife leiten, wie dies z.

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}
166
Chris N

Dies sollte wesentlich schneller ablaufen als bei der späten Filterung:

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
78
Shay Levy

Sie können auch Select-Object wie folgt verwenden:

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
18
imlokesh

Hier ist eine kürzere:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
11
JustAGuy

Wenn Sie relative Pfade wünschen, können Sie einfach das Flag -Name verwenden.

Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name

8
Polymorphix
Get-ChildItem -Recurse *.txt | Format-Table FullName

Das habe ich benutzt. Ich denke, es ist verständlicher, da es keine Schleifensyntax enthält.

3
Mandrake

[alternative Syntax]

Für manche Menschen sind Richtungsrohrbediener nicht ihr Geschmack, sie bevorzugen eher Ketten. Sehen Sie sich einige interessante Meinungen zu diesem Thema an, die in roslyn issue tracker enthalten sind: dotnet/roslyn # 5445

Je nach Fall und Kontext kann einer dieser Ansätze als implizit (oder indirekt) betrachtet werden. In diesem Fall erfordert das Verwenden von Pipe gegen Aufzählungszeichen beispielsweise, dass das spezielle Token $_ (aka PowerShell's "THIS" token) für manche unangenehm erscheint.

Für solche Leute gibt es hier eine prägnantere und einfachere Methode, dies mit dot chaining zu tun:

(gci . -re -fi *.txt).FullName

(<rant> Beachten Sie, dass der Parser für Befehlsargumente von PowerShell die partiellen Parameternamen akzeptiert. Daher werden neben -recursive; -recursiv, -recursi, -recurs, -recur, -recu, -rec und -re angenommen, jedoch nicht -r richtige Wahl, die mit einzelnen --Zeichen sinnvoll ist (wenn wir POSIXy UNIXy-Konventionen verwenden)! </ rant>)

1
vulcan raven
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
1
Vuong Doan

Dies funktionierte für mich und erzeugt eine Liste mit Namen:

$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname

Ich fand es mit get-member -membertype properties, einem unglaublich nützlichen Befehl. Die meisten Optionen, die Sie erhalten, werden mit einem .<thing> angehängt, wie fullname hier ist. Sie können den gleichen Befehl verwenden.

  | get-member -membertype properties 

am Ende eines Befehls erhalten Sie weitere Informationen zu den möglichen Aufgaben und zum Zugriff darauf:

get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
1
L1ttl3J1m

Versuche dies:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
1
Mykhailo Basiuk

Wirklich nervig in PS 5, wo $ _ nicht der volle Pfad in foreach ist. Dies sind die Zeichenfolgenversionen von FileInfo- und DirectoryInfo-Objekten. Aus irgendeinem Grund behebt ein Platzhalter im Pfad das Problem oder verwendet PS 6. Sie können auch auf get-item in der Mitte pfeifen.

Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }
1
js2010

Ich verwende das folgende Skript, um den gesamten Ordnerpfad zu extrahieren:

Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"

Vollständiger Ordnerpfad kommt nicht. Nach 113 Zeichen kommt:

Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...
0
Ankit Gupta