PowerShell脚本未在其他计算机上压缩

时间:2018-11-20 21:47:03

标签: powershell scripting zip 7zip maxlength

我有以下用于压缩旧文件的脚本:

# Zipping old files and sending them to a file on desktop if older than 60 days

Function Zip {    
  Param(
    [Parameter(Mandatory)]
    [string]$zipFile
    ,
    [Parameter(Mandatory)]
    [String[]]$toBeZipped
  )
  $null = & "C:\Program Files\7-Zip\7z.exe" A -tzip $zipFile $toBeZipped
}

$Days = 60    
$LastWrite = (Get-Date).Date.AddDays(-$Days)
$TargetFolder = "D:\Testing\*"

$Files = Get-Childitem $TargetFolder -Recurse |
  Where-Object { $_.LastWriteTime -le $LastWrite } |
    Select-Object -ExpandProperty Fullname

Zip "$($ENV:USERPROFILE)\Desktop\TEST.zip" $Files

我在一台虚拟机和一台物理计算机上进行测试时就工作了。 但是,当我在另一台计算机上尝试时,它失败了。 这就是我得到的:

Program '7z.exe' failed to run: The filename or extension is too long
At C:\Users\Admin\Documents\zip help.ps1:23 char:9
+ $null = & "C:\Program Files\7-Zip\7z.exe" A -tzip $zipFile $toBeZippe ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.
At C:\Users\Admin\Documents\zip help.ps1:23 char:1
+ $null = & "C:\Program Files\7-Zip\7z.exe" A -tzip $zipFile $toBeZippe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedEx 
   ception
    + FullyQualifiedErrorId : NativeCommandFailed

该脚本不能使用7-zip。其他计算机在完全相同的文件路径中有7-Zip,因此我不确定我的问题是什么。任何输入将不胜感激。

编辑:我可以确认错误是由于文件路径太长。在路径较短的文件上尝试了我的脚本,效果很好。

1 个答案:

答案 0 :(得分:0)

我能够弄清楚是什么原因造成的。该文件夹中还包含许多其他文件夹。 -Recurse使脚本在每个文件夹中均显示,从而导致此问题。我要做的就是调整脚本以删除-Recurse,它就可以了。