[PowerShell] script dat hetzelfde doet als 'dir /b' in cmd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SparTi
  • Registratie: Mei 2008
  • Laatst online: 31-08 10:15
Mijn huidige bat scriptje wil ik overzetten naar Powershell, maar hierbij loop ik tegen één probleempje aan.

Situatie: In de map c:\backup\ staan een aantal mappen die beginnen met 'test-'<naam van de map>.

Vraagstelling: Een overzicht generen van alle 'test' mappen op basis van 'last write time'. Dus nieuwste bestand staat bovenaan en oudste bestand staat onderaan.

In mijn oude batch file had ik dit opgelost met:
code:
1
dir /b /a:d-s /O:GD c:\backup\ | find "test" >c:\backup\overzicht.txt


Voor Powershell had ik het volgende in gedachten:
code:
1
dir c:\backup\* -filter "test*"  | ?{($_.PSIsContainer)} | sort -property lastwritetime | Format-Table Name -HideTableHeaders -AutoSize >c:\backup\overzicht.txt


De output van Powershell valt mij tegen, er staan onnodige enters in, namelijk in de eerste en in de laatste 2 regels en achter ieder gevonden resultaat, staan enorm veel spaties. :( De overbodige enters heb ik weg weten te filteren met:
code:
1
cat c:\backup\overzicht.txt | where {$_ -notmatch "^$" } > c:\backup\overzicht2.txt


Resultaat wat in overzicht2.txt staat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
test-Contacts                
test-Desktop                 
test-Documents               
test-Downloads               
test-Favorites               
test-Links                   
test-Music                   
test-Office Genuine Advantage
test-Pictures                
test-Saved Games             
test-Searches                
test-temp                    
test-Tracing                 
test-Videos

Alleen blijven de spaties nog over. Ik heb werkelijk geen idee hoe ik deze spaties weg krijg achter de gevonden mappen. Belangrijk detail: Achter 'Office Genuine Advantage' staat geen spatie, waarschijnlijk omdat dit de langste naam heeft.


Wat ik al geprobeerd heb:
- Google: Powershell, dir /b option
- Google: Out-File geraadpleegd en daarmee ook de bijbehorende 'Formats'
- in GoT gezocht op Powershell + dir /b
- Opdracht regel iets ingekort om te testen, maar ook daar staan er onnodige enters en een hoop spaties in.
code:
1
dir | format-table Name -hideTableHeaders -AutoSize >test.txt


Jammer dat de optie dir /b niet meer in powershell bestaat. Iemand die mij een steuntje in de rug kan geven hierover? :)

[ Voor 4% gewijzigd door SparTi op 13-02-2011 00:19 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
In PowerShell is dir een alias voor Get-ChildItems, de output hiervan is een verzameling van objecten. Door de output van dit commando te pipen naar select kun je kiezen welke properties je wilt hebben.

Volgens mij geeft onderstaand commando de output die je zoekt:
dir | sort -Property LastWriteTime | foreach { write $_.Name } > output.txt


Klein ranzig trucje wat ik hier uithaal: een table (ook met één kolom) heeft altijd een bepaalde breedte. Door simpelweg te itereren door alle items en het te outputten naar een regel werk ik daar omheen.

[ Voor 25% gewijzigd door Alex) op 13-02-2011 04:37 ]

We are shaping the future


Acties:
  • 0 Henk 'm!

  • SparTi
  • Registratie: Mei 2008
  • Laatst online: 31-08 10:15
Prachtig, het werkt inderdaad zoals ik het wilde. Moet zeggen dat ik het zo niet zag. Mijn eventuele oplossing was, dat alle mappen hetzelfde aantal karakters zouden bevatten waardoor die spaties ook verdwenen waren. :p

Thanks! :) je was trouwens wel helder van geest, gisteravond ;)