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

问题描述:

我想将多个文件压缩为一个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#解决方案。

问题是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