Разархивируйте несколько папок zip с оригинальным именем - PullRequest
0 голосов
/ 23 мая 2019

Я новичок в powershell и застрял в создании кода, поскольку у меня около 20 папок zip, расположенных по адресу D:\Input. Я хочу разархивировать все папки в D:\Output с исходным именем папки zip, но со следующим требованием, например, у меня есть папка zip, расположенная в D: \ Input с именем "ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826", и она содержит следующее папка "1ac7b-2d62-403c-8394-5bd33cbe7".

Поэтому, когда я разархивирую, я хочу следующую папку в D: \ Output "1ac7b-2d62-403c-8394-5bd33cbe7". После этого сценарий переименует эту папку "1ac7b-2d62-403c-8394-5bd33cbe7" в исходную папку zip, которая называется "ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826". У меня к тому же шагу до 20 папок zip, поэтому я думаю, что цикл будет предпочтительнее. Может кто-нибудь, пожалуйста, помогите мне в этом сценарии

$ZipFilesPath = "D:\Input"
$UnzipPath = "D:\Output"

$Shell = New-Object -com Shell.Application
$Location = $Shell.NameSpace($UnzipPath)

$ZipFiles = Get-Childitem $ZipFilesPath -Recurse -Include *.ZIP

$progress = 1
foreach ($ZipFile in $ZipFiles) {
    Write-Progress -Activity "Unzipping to $($UnzipPath)" -PercentComplete (($progress / ($ZipFiles.Count + 1)) * 100) -CurrentOperation $ZipFile.FullName -Status "File $($Progress) of $($ZipFiles.Count)"
    $ZipFolder = $Shell.NameSpace($ZipFile.fullname)


    $Location.Copyhere($ZipFolder.items(), 1040)
    $progress++
    $a= $ZipFile.Name
    Write-Host $a
}

1 Ответ

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

Поскольку неясно, что содержит zip-файл, я советую

  • сначала создать папку в D:\Output с zip-файлами BaseName и распаковать туда.

## Q:\Test\2019\05\23\SO_56279162.ps1
$ZipFilesPath =  "D:\Input"  # 'A:\Input'  #
$UnzipBase    =  "D:\Output" # 'A:\Output' #

$Shell = New-Object -com Shell.Application

$ZipFiles = Get-Childitem $ZipFilesPath -Recurse -Include *.ZIP

$progress = 1
foreach ($ZipFile in $ZipFiles) {
    Write-Progress -Activity "Unzipping to $($UnzipPath)" `
      -PercentComplete (($progress / ($ZipFiles.Count + 1)) * 100) `
      -CurrentOperation $ZipFile.FullName `
      -Status "File $($Progress) of $($ZipFiles.Count)"

    $ZipFolder = $Shell.NameSpace($ZipFile.fullname)

    $UnzipPath = Join-Path $UnzipBase $ZipFile.BaseName
    New-Item $UnzipPath -ItemType Directory | Out-NUll
    $Location = $Shell.NameSpace($UnzipPath)

    $Location.Copyhere($ZipFolder.items(), 1040)
    $progress++
}

Пример дерева (на моем RamDrisk A:)

> tree /F A:\
A:\
├───input
│       ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826.zip
│
└───Output
    └───ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826
        └───1ac7b-2d62-403c-8394-5bd33cbe7
                test.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...