2011-04-12 75 views
7

我想將多個文件壓縮爲一個zip文件。如何使用PowerShell將多個文件壓縮爲一個zip文件?

我堅持這樣的時刻:

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\" 
} 

我得到這個例外

寫郵編:無法綁定參數參數「路徑」,因爲它是空的。

這部分的問題是:

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

我從來沒有使用PowerShell的之前,但我必須提供一個腳本,我不能提供一個C#解決方案。

回答

9

問題是Get-ChildItem返回System.IO.FileInfo類的實例,該類沒有名爲Path的屬性。因此,該值不能通過管道自動映射到Write-Zip cmdlet的參數Path

你將不得不使用ForEach-Object cmdlet的使用System.IO.FileInfo.FullName屬性,它包含了完整路徑壓縮檔案:

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

下面是使用aliases和位置參數的命令的一個較短的版本:

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

相關資源:

+0

如果你想讓它更短,你可以在過濾器移動到'GET-ChildItem'調用是這樣的:'目錄C:\日誌* .TXT | foreach {Write-Zip $ _。FullName「$ _。zip」}' – 2016-08-15 08:42:47

相關問題