如何压缩太长的文件?
How do I zip up files that are too long?
我正在使用 PowerShell 脚本压缩超过 60 天的文件。其中一些文件的文件名非常长,所以我收到文件名或扩展名太长的错误。
我不想进入每个文件并更改名称,所以我需要一种方法能够同时将某些内容应用于所有文件,或者让我的脚本以某种方式绕过错误。此脚本也将在多台计算机上 运行,所以我不想在每台计算机上下载一些东西。
这是脚本:
#Set source and target
$Source = "D:\Testing\"
$Target = "$ENV:USERPROFILE\Desktop\TEST.zip"
#Set time parameters
$Days = 60
$LastWrite = (Get-Date).Date.AddDays(-$Days)
#Invoke 7-zip
if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw
"$env:ProgramFiles-Zipz.exe needed"}
set-alias zip "$env:ProgramFiles-Zipz.exe"
$Target = Get-Childitem $Source -Recurse | Where-Object -FilterScript
{($_.LastWriteTime -ge $LastWrite)}
zip a -mx=9 $Target $Source
我正在使用 7-zip 压缩文件,我有 PS 5.1 版。
如评论中所述,解决长文件名的一种方法是存储相对路径。如果您使用相对路径指定输入文件并且它们解析为您要归档的文件,7Zip 将存储相对路径,如 this answer 中所述。
中间文件可能很乱,所以我有 方法在 zip 文件中存储相对路径。
您可以在命令行上指定 -ParentFolder 以存储相对于父级的路径,如果您想要在另一台计算机上存档文件,则包括 UNC 路径。如果未指定 -ParentFolder,它将选择脚本的文件夹作为父文件夹并存储相对于脚本的路径。
将代码复制到名为 ArchiveOldLogs 的新脚本中。ps1 和 运行 使用以下命令行将其复制:
.\ArchiveOldLogs.ps1 -ParentFolder "D:\Testing\" -FileSpecs @("*.*") -Filter { $_.LastWriteTime -lt (Get-Date).AddDays(-60)} -DeleteAfterArchiving:$false
这将使您在要存储的路径末尾多 11 个字符,这应该足以解决 Windows and Zip 路径长度限制之间的 10 个字符差异。如果仍然出现错误,请尝试更深的文件夹。无法归档或已经归档的文件将被跳过。
当您认为它只归档您想要的内容时,从命令行中删除 -DeleteAfterArchiving:$false
。
我正在使用 PowerShell 脚本压缩超过 60 天的文件。其中一些文件的文件名非常长,所以我收到文件名或扩展名太长的错误。
我不想进入每个文件并更改名称,所以我需要一种方法能够同时将某些内容应用于所有文件,或者让我的脚本以某种方式绕过错误。此脚本也将在多台计算机上 运行,所以我不想在每台计算机上下载一些东西。
这是脚本:
#Set source and target
$Source = "D:\Testing\"
$Target = "$ENV:USERPROFILE\Desktop\TEST.zip"
#Set time parameters
$Days = 60
$LastWrite = (Get-Date).Date.AddDays(-$Days)
#Invoke 7-zip
if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw
"$env:ProgramFiles-Zipz.exe needed"}
set-alias zip "$env:ProgramFiles-Zipz.exe"
$Target = Get-Childitem $Source -Recurse | Where-Object -FilterScript
{($_.LastWriteTime -ge $LastWrite)}
zip a -mx=9 $Target $Source
我正在使用 7-zip 压缩文件,我有 PS 5.1 版。
如评论中所述,解决长文件名的一种方法是存储相对路径。如果您使用相对路径指定输入文件并且它们解析为您要归档的文件,7Zip 将存储相对路径,如 this answer 中所述。
中间文件可能很乱,所以我有
将代码复制到名为 ArchiveOldLogs 的新脚本中。ps1 和 运行 使用以下命令行将其复制:
.\ArchiveOldLogs.ps1 -ParentFolder "D:\Testing\" -FileSpecs @("*.*") -Filter { $_.LastWriteTime -lt (Get-Date).AddDays(-60)} -DeleteAfterArchiving:$false
这将使您在要存储的路径末尾多 11 个字符,这应该足以解决 Windows and Zip 路径长度限制之间的 10 个字符差异。如果仍然出现错误,请尝试更深的文件夹。无法归档或已经归档的文件将被跳过。
当您认为它只归档您想要的内容时,从命令行中删除 -DeleteAfterArchiving:$false
。