Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Распаковка массива zip архивов в одну папку с переименованием файлов

#windows #файлы #cmd #powershell #zip


Есть папка с большим количеством zip-архивов.
Каждый архив содержит внутри папку(имя папки то же, что и у архива) с 1+ файлов.
Как c помощью средств windows(и какого-нибудь архиватора)извлечь все файлы в одну
папку так, чтобы конечные файлы были переименованы по шаблону "<имя папки>-<имя файла>"?

    


Ответы

Ответ 1



Kак подсказал @nick_gabpe, нужно распаковать в папку: FOR %%Z IN ("%src_dir%\*.zip") DO ( 7z e "%%Z" -o"%tgt_dir%" ) Далее PowerShell скрипт выполнит остальное: $fiels = Get-ChildItem -Path . -rec -Filter "*.txt" # найти все файлы из директории, откуда запускается (.), с расширением txt foreach($f in $fiels){ $dirName = (Get-Item $f.FullName).Directory.Name # получаем имя папки # копируем файл с новым именем. Путь C:\temp\1111 должен существовать Copy-Item -Path $f.FullName -Destination "C:\temp\1111\$($dirName+ "-" + $f.Name)" }

Ответ 2



Вариант на чистом PowerShell (без использования внешних утилит): # Указываем папку с архивами $rootPath = 'D:\TEST' # Извлекаем и удаляем все архивы Add-Type -AssemblyName System.IO.Compression.FileSystem Get-Item "$rootPath\*.zip" | ForEach-Object { [System.IO.Compression.ZipFile]::ExtractToDirectory($_.FullName, $rootPath) Remove-Item $_.FullName -Verbose } # Избавляемся от папок Get-ChildItem $rootPath -Directory | ForEach-Object { Get-ChildItem $_.FullName | ForEach-Object { Move-Item $_.FullName -Destination "$($_.Directory.Parent.FullName)\$($_.Directory.BaseName)-$($_.Name)" -Verbose } Remove-Item $_.FullName -Verbose }

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

Отправить комментарий