2017-05-25 2 views
0

Ich versuche die neueste Version mehrerer Dateien in einem Verzeichnis zu finden. Momentan rufe ich GCI pro Datei an, aber das ist extrem langsam, daher möchte ich stattdessen alle Ergebnisse nach dem eindeutigen Dateinamen zwischenspeichern und dann einfach eine Suche im Cache durchführen.Wie gruppiere und sortiere ich Werte in ein Wörterbuch?

Ich mache zur Zeit folgenden:

Gci $filePath -Recurse | ?{ -Not $_.PSIsContainer } | Group-Object Name 

Ich versuche, dies auf den Powershell-Äquivalent des Code C# zu konvertieren:

Wie würde ich dies in Powershell erreichen?

Antwort

1

Was würde ich tun, um eine Hash-Tabelle von Dateien zu erstellen, wäre eine leere Hash-Tabelle zu erstellen, und es dann mit den Ergebnissen Ihrer GCI füllen:

$files = ${} 
GCI $filepath -Recurse -File | Group Name | ForEach{ $files.Add($_.Name, ($_.Group | Sort LastWriteTime)) } 

Oder wenn alles, was Sie wollen, ist die neueste Datei , fügen Sie | Select -Last 1 nach der Sort LastWriteTime hinzu. Wenn alles, was dich interessiert, der Pfad ist, könntest du sogar | Select -Last 1 -ExpandProperty FullName tun.

+0

Es stellte sich heraus, dass ich tatsächlich das Gleiche erfand, wie ich auf eine Antwort wartete, mit Ausnahme der anderen Syntax. Vielen Dank. 'Gci $ path -Include $ extensions -Recurse | ? {-Nicht $ _. PSIsContainer} | Gruppenobjektname | % {$ cache [$ _. Name] = ($ _. Group | Sort-Objekt LastWriteTime | Select-Object -Last 1) .FullName} ' – Lunyx

Verwandte Themen