如何使用Powershell快速创建特定文件和目录的存档并维护结构

时间:2018-12-13 16:59:00

标签: powershell compression 7zip powershell-v5.0

我正在按以下方式使用Compress-Archive创建一个包含3个文件和2个目录(及其所有子目录)的zip文件

Compress-Archive -CompressionLevel Fastest -Force -DestinationPath ./My.zip -Path .\foo.ini, 
                    .\bar.exe, 
                    .\README.TXT,
                    .\dir1, 
                    .\dir2

不幸的是,它非常慢。我想使用7-Zip(更快)来创建一个zip文件。我一直在尝试使用Powershell附加组件Compress-7Zip进行压缩。同样不幸的是,我无法弄清楚如何使用Compress-7Zip仅获取指定的文件。我以为我可以用所有可以插入Compress-7Zip的文件填充变量。

$stuff = ???        .\foo.ini, 
                    .\bar.exe, 
                    .\README.TXT,
                    .\dir1, 
                    .\dir2

#$stuff now contains 3 txt files in the root and the complete contents
#dir\ and \dir2 with their paths

$stuff | Compress-7Zip -Format Zip -ArchiveFileName .\my.zip

如何使用Get-Child-Item(或其他方式)将目录结构放入$ stuff?

或者,如果您还有其他建议使用比“压缩存档”更好的压缩方法来创建此zip,那么我很高兴。

1 个答案:

答案 0 :(得分:0)

几件事...

(在最后一个带有Compress-7Zip的代码段中)您似乎要尝试(splat)[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting?view=powershell-6]

enter image description here

这可能对您没有帮助,对不起,我找不到Compress-Archive进行确认的文档。它看起来像是在使用字符串数组。因此,如果您将所有这些文件填充到字符串数组中……

$files_to_compress = @(
  '.\foo.ini'
  '.\bar.exe' 
  '.\README.TXT'
  '.\dir1'
  '.\dir2'
)

您可能可以执行以下操作...

Compress-Archive -CompressionLevel Fastest `
-Force -DestinationPath ./My.zip `
-Path $files_to_compress 

希望这个例子有意义。