2011-04-12 16 views
7

Birden çok dosyayı tek bir zipte sıkıştırmak istiyorum.Birden çok dosyayı PowerShell ile tek bir zip halinde sıkıştırmak nasıl?

ben şu anda bu konuda şaşırıp:

Get-ChildItem -path C:\logs -Recurse | Where {$_.Extension -eq ".csv" -and $_.LastWriteTime -lt (Get-Date).AddDays(-7)} | write-zip -level 9 -append ($_.LastWriteTime).zip | move-item -Force -Destination { 
    $dir = "C:\backup\archive" 
    $null = mkdir $dir -Force 
    "$dir\" 
} 

Bu istisna

Yaz-Zip olsun: o boş olduğu için 'Yolu' parametresine argüman bağlama olamaz.

Bu kısım sorundur:

write-zip -level 9 -append ($_.LastWriteTime).zip 

Daha önce powershell kullanılan hiç ama bir komut dosyası sağlamak zorunda, ben bir C# çözüm sağlayamaz.

cevap

9

sorun olduğunu Path adında bir özelliği yok System.IO.FileInfo sınıfın Get-ChildItem döner örneklerini. Bu nedenle, değer, borular aracılığıyla Write-Zip cmdlet'inin Path parametresine otomatik olarak eşlenemez.

Sen tam yolunu içerir System.IO.FileInfo.FullName özelliğini kullanarak dosyaları sıkıştırmak üzere ForEach-Object cmdlet'ini kullanmak gerekecektir:

Get-ChildItem -Path C:\Logs | Where-Object { $_.Extension -eq ".txt" } | ForEach-Object { Write-Zip -Path $_.FullName -OutputPath "$_.zip" } 

İşte aliases ve konumsal parametreler kullanılarak komuta daha kısa bir versiyonu var:

dir C:\Logs | where { $_.Extension -eq ".txt" } | foreach { Write-Zip $_.FullName "$_.zip" } 

İlgili kaynaklar:

+0

bunu daha da kısa Böyle 'Get-ChildItem' çağrısı Filtreyi taşıyabilirsiniz olmak için:' dir c: \ Logs * .txt | foreach {Yazma-Zip $ _. FullName "$ _. zip"} ' –

İlgili konular