2016-04-14 25 views
1

Yeni başlayanlar için bir PowerShell kursu alıyorum ve eğitmen yardım istediğinde tamamen işe yaramaz. Yapmaya çalıştığım görev: .doc, .docx, .xls veya .xlsx dosya uzantısıyla biten dosyalar için bilgisayarımı ara. Dosya adlarını ve boyutlarını (dosya uzantısına göre gruplar halinde) “File_Summary.txt” adlı bir metin dosyasına kaydedin. Ayrıca çıktı, her dosya uzantısı için toplam dosya sayısı ve toplam dosya boyutu ile sonuçlandırılmalıdır. Şu ana kadar yarattığım kod:Her Uzantı için Toplam Dosya Boyutuna Sahip Powershell Count Dosya Uzantıları

$path = ".\" 
$destination = "C:\Users\StayPositibve\Desktop\pleasework1.txt" 

$results = Get-ChildItem .\* -Recurse | where {$_.extension -in ".doc",".docx",".xls",".xlsx"} | Select-Object Name, Extension, @{Name="Kbytes";Expression={ "{0:N0}" -f ($_.Length/1Kb) }} 
$results | Sort-Object -Property extension | Out-File $destination 
$countFiles = Get-ChildItem .\* -Recurse | where {$_.extension -in ".doc",".docx",".xls",".xlsx"} 
$countFiles | Group-Object -Property extension | Out-File $destination -Append 

Kod çalışır (her ne kadar emin bir şekilde kodlanmış olsa da eminim); Ancak, her uzantı için toplam dosya boyutunu nasıl ekleyeceğimi anlayamıyorum. Her uzantı için toplam dosya sayısına sahibim, ancak toplam boyut değil. Herkesin bana verebileceği herhangi bir yardım için teşekkürler!

+0

Döngü içermeyen düzgün bir seçeneğiniz olduğunu düşünmüyorum; Düşünebildiğim en temiz 'Group-Object -Property Extension' kullanmak ve bir değişkenin içinde saklamak, daha sonra '$ store | ForEach {$ _. Name; $ _. Ölçü-Nesne -Suma -Merdiven Uzunluğu | -ExpandProperty Sum} 'i seçin ve bunun ne yaptığını görün ve bunu dosyaya eklemek için kullanın. (Temel Get-ChildItem çağrısının sonuçlarını, herhangi bir şey yapmadan önce ilk kez saklamanızı öneririm, daha sonra sonuçları yeniden kullanabilir ve dosya sayımı için tekrar arama yapmasını beklemeniz gerekmez). – TessellatingHeckler

cevap

1

TessellatingHeckler'ın önerdiği gibi Measure-Object kullanmak istiyorsunuz. Bu başarmak için çalışıyoruz ne yapacak: Ben $results yeniden kullanmak

$path = ".\" 
$destination = "C:\Users\StayPositibve\Desktop\pleasework1.txt" 

$results = Get-ChildItem .\* -Recurse | where {$_.extension -in ".doc",".docx",".xls",".xlsx"} | Select-Object Name, Extension, @{Name="Kbytes";Expression={ "{0:N0}" -f ($_.Length/1Kb) }} 
$results | Sort-Object -Property extension | Out-File $destination 
$results|group extension|select Count,Name,@{l='Total KB';e={$_.Group | Measure-Object -Property kbytes -Sum|select -expand sum}}| Out-File $destination -Append 

ve sizin gibi grup yaptım, ama o zaman ben her Measure-Object ile gruplama toplam boyutunu almak yeni bir özellik eklemek için Select kullanmak Select -Expand Sum'a iletildi.

+0

Yardımınız için TheMadTechnician ve TessellatingHeckler'a teşekkürler. Kodunuza baktığımda, yalnızca $ sonuçlarını kullanarak aynı işlemi yapan iki değişkeni nerede oluşturduğumu görebiliyorum. Bu konuda yeniyim, bu yüzden yavaşça oraya gitmekten memnunum. Tekrar teşekkürler! –

İlgili konular