如何使用PowerShell将多个文件压缩成一个zip文件?

时间:2011-04-12 12:10:50

标签: powershell zip pipe

我想将多个文件压缩成一个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:无法将参数绑定到参数'Path',因为它为null。

这部分是问题所在:

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

我之前从未使用过PowerShell,但我必须提供脚本,我无法提供c#解决方案。

1 个答案:

答案 0 :(得分: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" }

相关资源: