Zip несколько папок индивидуально - структура папок - PullRequest
0 голосов
/ 12 декабря 2018

Я сделал следующий код, чтобы заархивировать несколько папок в каталоге в свои собственные zip-файлы.

#Current path to directory
$fileLocation = read-host "Type/Paste location"
$zipFilesPath = cd "$fileLocation"
$currentDirectory = pwd

$source = Get-ChildItem -Path $currentDirectory -Directory
gci | Where-Object{($_.PSIsContainer)} | foreach-object{$_.Name}

Add-Type -assembly "system.io.compression.filesystem"

Foreach ($s in $source) {
    $zipDestination = Join-path -path $currentDirectory -ChildPath "$($s.name).zip"

    If(Test-path $zipDestination){
        Remove-item $zipDestination
    }
    [io.compression.zipfile]::CreateFromDirectory($s.fullname, $zipDestination)
}

#Clear Console
clear
#Read-Host -Prompt “Press Enter to exit”
start .\

Отдельная часть архивирования работает - мне потребовалось некоторое время, но мне удалось ее получитьготово.

Например, zipfolder1

zipfolder2

zipfolder3

zipfolder1.zip

zipfolder2.zip

zipfolder3.zip

Моя проблема в том, что когда я выполняю zip, я не просто хочу, чтобы он циклически просматривал папки и архивировал содержимое в папках, а вместо этого архивировал папку как есть.

Что зав настоящее время скрипт выводит:

zipfolder1.zip> [файлы в формате zip взяты из папки zipfolder1]

Что я хочу вывести:

zipfolder.zip> zipfolder1> [файлы в zip взяты из папки zipfolder1]

Можно ли это сделать?По сути, я хочу сохранить саму папку в zip-архиве, а не только содержимое

1 Ответ

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

Я бы просто использовал командлет Compress-Archive:

$fileLocation = read-host "Type/Paste location"
$directories = Get-ChildItem -Path $fileLocation -Directory

foreach ($directory in $directories) {
    Compress-Archive -Path $directory.FullName -DestinationPath "$($directory.FullName).zip" -Force
}

Обратите внимание, это сжимает каталог, только если в нем есть что-то для сжатия.

...