解压缩具有原始名称的多个zip文件夹

时间:2019-05-23 16:07:13

标签: powershell

我对Powershell还是陌生的,因为在var data = {}; data.data = { prop1: 'x', prop2: 'x' }; data.days = [ 5, 6 ]; data.days.forEach(day => { let newData; newData = Object.assign({}, data.data); newData.date = day; console.log('newData.date: ' + newData.date) console.log(newData) });上有大约20个zip文件夹,所以我坚持编写代码。我想用原始名称zip文件夹解压缩D:\Input上的所有文件夹,但是要满足以下要求,例如,我在D:\ Input上拥有名为“ D:\Output”的zip文件夹,并且它包含以下文件夹“ ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826”。

因此,当我解压缩时,我希望在D:\ Output“ 1ac7b-2d62-403c-8394-5bd33cbe7”下有以下文件夹。之后,脚本会将这个文件夹“ 1ac7b-2d62-403c-8394-5bd33cbe7”重命名为原始的zip文件夹“ 1ac7b-2d62-403c-8394-5bd33cbe7”。我必须对20个zip文件夹执行相同的步骤,所以我认为for循环会更好。谁能帮我这个脚本

ET_NM.TEST_DATA_2.ET_ID.84.C_ID.4016.Part.1.20190502.0826

1 个答案:

答案 0 :(得分:0)

由于尚不清楚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