Как использовать PowerShell для быстрого создания архива определенных файлов и каталогов и поддержания структуры - PullRequest
0 голосов
/ 13 декабря 2018

Я использую Compress-Archive следующим образом для создания zip-файла, который содержит 3 файла и 2 каталога (и все их подкаталоги)

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 (или что-то еще), чтобы получить структуру каталогов в$ материал?

Или, если у вас есть другое предложение для создания этого почтового индекса, используя лучший метод сжатия, чем то, что Compress-Archive, я весь слух.

1 Ответ

0 голосов
/ 14 декабря 2018

Пара вещей ...

Похоже (в последнем фрагменте с Compress-7Zip) вы пытаетесь (сплат) [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 

Надеюсь, этот пример имеет смысл.

...