【问题标题】:Zipping using powershell使用 powershell 进行压缩
【发布时间】:2021-04-26 09:31:12
【问题描述】:

我已编写代码将 7 天前的文件从源文件夹压缩到子文件夹,然后删除原始文件。我的代码最适用于具有较少文件的 Compress-ArchiveRemove-Item cmdlet,但需要更多时间和系统内存来处理大量文件。 所以,我正在研究一个使用 7zip 的解决方案,因为它更快。

以下代码可以正确压缩,但不限于 7 天以前的文件,并从源文件夹中删除所有文件。它应该只压缩和删除超过 7 天的文件。

代码有什么问题吗。

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias 7z "$env:ProgramFiles\7-Zip\7z.exe" 

$Days = "7"
$Date = Get-Date -format yyyy-MM-dd_HH-mm
$limit = (Get-Date).AddDays(-$Days)

$filePath = "C:\Users\529817\New folder1\New folder_2" 
 
Where LastWriteTime -lt $limit | 7z a -t7z -sdel "C:\Users\529817\New folder1\New folder_2\ARCHIVE\$Date.7z" "$filePath" 

【问题讨论】:

  • $limit = (Get-Date).AddDays(-7).Date and.. 你是不是忘了Get-ChildItem ??
  • .Date 将舍入到结果日期的午夜。这可能很好,但我没有读到问题中的意图。

标签: powershell archive ziparchive


【解决方案1】:

我认为您没有正确运行 7zip 命令。您只是告诉它将目录$filepath 中的所有文件添加到存档中,然后删除所有文件。我非常怀疑 7zip 是否可以像您的示例所建议的那样接受管道输入。

examples from 7Zip cmdline help

7z a archive1.zip subdir\

将文件夹 subdir 中的所有文件和子文件夹添加到存档 archive1.zip。存档中的文件名将包含 subdir\ 前缀。

7z a archive2.zip .\subdir\*

将文件夹 subdir 中的所有文件和子文件夹添加到存档 archive2.zip。存档中的文件名将不包含 subdir\ 前缀。

我必须下载 7Zip 进行测试,但我认为您需要一个循环来处理您使用 Where 子句隔离的文件。它可能看起来像:

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias 7z "$env:ProgramFiles\7-Zip\7z.exe" 

$Days = "7"
$Date = Get-Date -format yyyy-MM-dd_HH-mm
$limit = (Get-Date).AddDays(-$Days)

$filePath = "C:\Users\529817\New folder1\New folder_2" 

Get-ChildItem $filePath |
Where-Object{ $_.LastWriteTime -lt $limit } | 
ForEach-Object{
    7z a -t7z -sdel "C:\Users\529817\New folder1\New folder_2\ARCHIVE\$Date.7z" $_.FullName
}

注意:至少在您的示例中,您缺少Get-ChildItem 命令。我认为您不需要从 [DateTime] 方法返回的 .Date 对象中引用 .Date 属性,除非您希望边界是该日期的午夜。否则.AddDays() 将自然返回[DateTime]

【讨论】:

  • 抱歉,但这只是一个示例。我没有要测试的 7Zip。但是,根据您给出的描述,我确定您示例中的 7z 命令不正确。从文档中可以清楚地看到会发生什么。你需要调试并把你的注意力放在那里,你会搞定的。
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多