Войти

Показать полную графическую версию : Распаковка нескольких архивов в текущую папку


Skylear
30-07-2018, 18:34
всем привет.
есть:
1) установленный 7-zip
2) папка с подкаталогами и файлами, где то в подпапках лежат архивы (содержат только однотипные файлы типа *.tif)

задача:
1) через скрипт распаковать архивы (лежащие где-то там в каталогах) БЕЗ создания отдельной папки с названием архива (аналог "извлечь в текущую папку")
2) доработать скрипт, чтобы распакованный файл из архива подменял тот что уже был распакован (это необходимо, так как есть каталоги, где лежат архивы, а есть где архивы и распакованные из него файлы)
3) после того, как имеем каталоги, с распакованными файлами и их архивами - удалить все архивы.

вот этот скрипт распаковывает архивы с сохранением пути, НО создает новую папку

@echo off

for %%a in (zip, rar, 7z) do (
for /f "delims=" %%b In ('dir /b /s /a-d "H:\SHARE2\test\*.%%a" 2^>nul') do (
"C:\Program Files\7-Zip\7z.exe" x -t* "%%~b" -o"%%~dpnb" -y
)
)

pause

Skylear
30-07-2018, 20:08
в общем вот наколдовал, может кому надо.
Распаковывает все лежащие архивы из текущей папки (и подпапками) в собственный корень, с заменой файлов, если таковые были уже распакованы, а затем удаляет сами архивы (путь нужно указать). В итоге имеем структуру из папок и файлов без архивов.

FOR /D /r %%F in ("*") DO (

pushd %CD%
cd %%F
FOR %%X in (*.rar, *.zip, *.7z) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X" -y
)
popd

)

del /s "H:\SHARE2\test\zakaz\*.zip"
del /s "H:\SHARE2\test\zakaz\*.rar"
del /s "H:\SHARE2\test\zakaz\*.7z"
pause

собственно скрипт полезен, когда операторы или дизайнеры (ну работники) сами распаковывают архив с файлом, а потом забывают удалить или архив или сам файл. скрипт подчищает все это.
P.S: команды на удаление, где пути прописаны кириллицей - пересохранить в кодировке 866

evgkoms
12-06-2023, 00:52
Архиватор ExtractNow делает это сам через настройки




© OSzone.net 2001-2012