2012-12-17 12 views
19

Próbuję napisać jednolinijkową powłokę Powershell, która zawiera listę wszystkich typów plików w folderze (i jego podfolderach).Wyraźna lista typów plików w Powershell

Mam to do tej pory:

Get-ChildItem D:\Audio -Recursive | Select-Object PSParentPath, Extension | Export-Csv D:\Test.csv 

Jednak chciałbym zrobić lepiej i wyświetlacz dla każdego folderu, każdy znalazł przedłużenie tylko raz.

Załóżmy na przykład, że mam dziesięć plików mp3 i 1 plik jpg w plikach D: \ Audio \ foo i 5 flac oraz 1 plik txt w D: \ Audio \ bar. Chciałbym być wyjście:

  • foo .mp3
  • Foo .jpeg
  • bar .flac
  • bar .txt

Chyba powinienem użyć Get-Unique ale jak to określić w właściwości Extension, a NIE w właściwości Path?

+0

Czy Twoje podfoldery są tylko 1 głębokie? – zdan

Odpowiedz

29

Wystarczy dodać -Unique Select-Object:

Get-Childitem -Recurse | Select-Object PSParentPath,Extension -Unique 

(Również NazwaKatalogu może być lepiej niż PSParentPath tutaj)

+0

to całkiem miłe. nie wiedziałem o -unique switch =) –

+2

ponieważ jest to jeden liniowiec, sugerowałbym "gci" zamiast "get-childitem". Jest krótszy. Ponadto "-Recurse" może być "-rec". – D3vtr0n

+0

Idealny! Ten robi dokładnie to, co chciałem. – Lupuss

0

Spróbuj tego:

Get-ChildItem D:\Audio -Recurse | Group-Object psparentpath, extension | ? {(($_.Name -split ", .")[1]) -ne $Null } | ft -AutoSize @{Expression={(($_.Name.Split("\"))[$_.Name.Split("\").Length -1] -split ",")[0]};Label="Folder"}, @{Expression={($_.Name -split ", .")[1]};Label="Extension"} 

Aby wyświetlić pełną ścieżkę do folderu + rozszerzenie, spróbuj wykonać następujące czynności.

Get-ChildItem D:\Audio -Recurse | Group-Object psparentpath, extension | ? {(($_.Name -split ", .")[1]) -ne $Null } | ft -AutoSize @{Expression={($_.Name.Replace("Microsoft.PowerShell.Core\FileSystem::","") -split ", .")[0]};Label="Folder"}, @{Expression={($_.Name -split ", .")[1]};Label="Extension"} 
+2

zapomnij o tym. Jimmeh sprawiał, że wyglądało to tak łatwo: D –

2

i ukończ rozwiązanie Jimmeh, należy brać tylko dla -file plik

Get-ChildItem "c:\temp" -Recurse -file | select directoryname, Extension -Unique 
+0

Kliknięcie klawisza '-File' :) Ponieważ mam dużo folderów' aaa.bbb', które produkują mnóstwo niewłaściwych rozszerzeń. –

Powiązane problemy