Распакуйте несколько файлов в разные каталоги

#windows #powershell #unzip

#Windows #powershell #разархивируйте

Вопрос:

У меня есть несколько ZIP-файлов.

Они называются folder(1).zip, folder(2).zip, folder(3).zip. Используя PowerShell, когда я пытаюсь разархивировать их все в уникальные папки, используя это…

 Get-ChildItem 'c:usersnamedownloads' -Filter *.zip | Expand-Archive -DestinationPath 'c:usersnamedownloads'  -Force
  

Я помещаю все файлы в одну папку под названием «папка». Как я могу разархивировать zip-папки в отдельные папки?

Дополнительный вопрос, есть ли способ, как часть этого процесса, переименовать каждую папку по мере ее выхода, чтобы папка (1).zip стала именем-Здесь, папка (2).zip стала другим именем-Здесь и т. Д.?

Спасибо!

Комментарии:

1. Бонус. Не удается использовать 7zip…

2. Есть ли какая-либо корреляция между папками zip и именами новых папок? Что означает разные конкретные имена для каждого? Или новые имена будут похожи на newname1, newname2, newname3?

3. Помог ли мой ответ?

Ответ №1:

Поскольку вы указываете только один путь назначения, все они будут извлечены c:usersnamedownloads . Я полагаю, что каждый zip-архив содержит папку с именем «папка», поэтому все содержимое всех архивов оказывается вместе в c:usersnamedownloadsfolder

Вам нужно будет указать другой путь назначения для каждого архива. Не уверен, каким должно быть ваше соглашение об именовании, я использовал простой счетчик:

 $counter = 0
Get-ChildItem 'c:usersnamedownloads' -Filter *.zip | foreach {
    $destination = Join-Path $_.DirectoryName ("YourName"   $counter  )
    Expand-Archive $_.FullName -DestinationPath $destination
}
  

Конечно, я полагаю, что теперь каждая из этих папок будет иметь подпапку «папка», но если так создаются архивы, на самом деле это невозможно изменить. Если вы абсолютно уверены, что во всех архивах есть эта подпапка, вы можете сделать что-то вроде этого:

 $counter = 0
Get-ChildItem 'c:usersnamedownloads' -Filter *.zip | foreach {
    # expand to the root folder first
    Expand-Archive $_.FullName -DestinationPath $_.DirectoryName
    # now rename the extracted "folder" to whatever you like
    Rename-Item (Join-Path $_.DirectoryName "folder") -NewName ("YourName"   $counter  )
}