Как сжать несколько файлов в папке в одну сжатую папку?

Я пытаюсь автоматизировать повторяющийся сценарий с помощью сценария Powershell:

У меня есть сжатый (.zip) папка с несколькими файлами (.XML).

Мой сценарий:

  • распаковал эту папку, расположенную в: C:\Users\*\Downloads
  • измененное значение внутри конкретного в каждом файле
  • сжать весь файл в папку с определенным именем (формат: AppName.Version.zip), которая будет находиться по тому же пути: C:\Users\*\Downloads.

Вопросы:

  1. Как мне снова сжать папку, чтобы, нажав на сжатую папку, я сразу увидел файлы (сжатая папка> файлы), а не папку, а затем файлы (сжатая папка> файлы)

  2. Команды Compress и Expand кричат ​​о формате имени папки, и поэтому эти команды не справляются со своей задачей. Как мне преодолеть это?

     $languageString = Read-Host ...
     $replaceString = '<value>' + $languageString
     $file = Get-Childitem "c:\users\*\Downloads\app.version.zip" -Recurse
     $originalFileName = $file.Name
     $absoluteFilePath = $file.FullName
     $rename-item -path $absoluteFilePath -newname translate.zip
     $file = Get-Childitem "c:\users\*\Downloads\translate.zip" -Recurse
     $absoluteFilePath = $file.FullName
     $unzipFilePath = $absoluteFilePath.Substring(0, $absoluteFilePath.LastIndexOf('.'))
     expand-archive -path $absoluteFilePath -destinationpath $unzipFilePath
     $files = @(Get-Childitem "c:\users\*\Downloads\*.xml)
     foreach ($file in $files)
     {
        (Get-Content -path $file.FullName -Raw) -replace '<value>' , $replaceString | Set-Content -Path $file.FullName

    #this line makes problems...

     Compress-Archive -path $unzipFilePath -Destinationpath $unzipFilePath -Force

Пожалуйста, предоставьте нам код, который вы используете для сжатия файлов и их распаковки. И, пожалуйста, используйте поддельные имена вместо специальных символов, таких как *, если вы беспокоитесь об утечке личной информации.

Shadowzee 29.05.2019 09:18

* char предназначен для запуска скрипта на разных машинах/пользователях.

Hiddai 29.05.2019 11:35

Похоже, что команда { после Foreach не имеет подходящего }. Можете ли вы добавить сообщение об ошибке, которое вы видите, для подтверждения?

Rich Moss 29.05.2019 23:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
458
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу это в трех шагах: 1. распаковать во временное чистое место. 2. изменить ваши файлы там 3. заархивируйте это место обратно.

код будет иметь функции:

function Unzip_archive ($ArchiveFullPath, $Temp_Work_Fld) {
    try {
        #unzip
        Add-Type -assembly 'system.io.compression.filesystem'
        [io.compression.zipfile]::ExtractToDirectory($ArchiveFullPath, $Temp_Work_Fld)
    }
    catch {
        throw "Failed to unzip the artifact"
    }
    Remove-Item $ArchiveFullPath -Force #only if you want to delete the archive
}

function CreateZipArchive($FolderToArchive, $ZipArchiveFullName){ 
    $source = Get-ChildItem * -Directory | Where-Object {$_.FullName -match "$FolderToArchive"}
    write-host "`nArchiving: $source ........."
    Add-Type -Assembly system.IO.compression.filesystem
    $compressionlevel = [System.IO.Compression.CompressionLevel]::Optimal
    [io.compression.zipfile]::CreateFromDirectory($source, $ZipArchiveFullName, $compressionlevel, $true)
    write-host "nDone !"
} 

затем просто вызовите функции до и после внесения изменений во временную папку

Другие вопросы по теме