Как сжать несколько файлов в папке в одну сжатую папку? - PullRequest
0 голосов
/ 29 мая 2019

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

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

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

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

Вопросы:

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

  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

1 Ответ

0 голосов
/ 29 мая 2019

Я вижу это в три этапа: 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 !"
} 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...