我想将多个文件压缩成一个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#解决方案。
答案 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" }
相关资源: