如何使用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" }
相关资源:
如果你想让它更短,你可以在过滤器移动到'GET-ChildItem'调用是这样的:'目录C:\日志* .TXT | foreach {Write-Zip $ _。FullName“$ _。zip”}' – 2016-08-15 08:42:47