Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распаковка архивов в поддиректории с теми же именами

Ответить
Настройки темы
CMD/BAT - [решено] Распаковка архивов в поддиректории с теми же именами

Новый участник


Сообщения: 23
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте.
Нужен батник, который в директории, где он лежит, ищет архивы, и распаковывает их там же в подпапки с именами архивов (распаковать в "/"), с перезаписью, если такие папки и файлы уже есть.
Лучше с помощью консольной 7za.exe. Архивы могут иметь разные расширения. Но если будет код для zip-архивов, то можно будет дополнить батник аналогичным кодом для архивов с другими расширениями.

Отправлено: 08:10, 09-06-2018

 
mwz mwz вне форума

Аватара для mwz

Ветеран


Contributor


Сообщения: 6579
Благодарности: 1577

Профиль | Сайт | Отправить PM | Цитировать


Цитата NuclearBox:
и распаковывает их там же в подпапки с именами архивов (распаковать в "/") »
Из этой фразы непонятно: каталоги с распакованными архивами должны создаваться именно в той же папке, где лежит батник — или где-то ещё, в какой-то мифической "/"?

-------
Mikhail Zhilin


Отправлено: 10:09, 09-06-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 23
Благодарности: 0

Профиль | Отправить PM | Цитировать


mwz, верный первый вариант - в той же папке, где лежит батник.
Если батник лежит в каталоге "FOLDER", то он должен найти в "FOLDER" все файлы архивов .zip (например).
Допустим, в "FOLDER" кроме прочих файлов и папок находится два архива - f1.zip и f2.zip
Батник должен их распаковать соответственно в папки "FOLDER/f1/" и "FOLDER/f2/", с перезаписью, если такие файлы и папки уже есть.

Отправлено: 10:21, 09-06-2018 | #3

mwz mwz вне форума

Аватара для mwz

Ветеран


Contributor


Сообщения: 6579
Благодарности: 1577

Профиль | Сайт | Отправить PM | Цитировать


Цитата NuclearBox:
"FOLDER/f1/" и "FOLDER/f2/" »
А, вы использовали *nix-запись. В Windows это будет:
"FOLDER\f1\" и "FOLDER\f2\"

-------
Mikhail Zhilin


Отправлено: 11:07, 09-06-2018 | #4


Ветеран


Contributor


Сообщения: 1249
Благодарности: 730

Профиль | Отправить PM | Цитировать


NuclearBox, Мне привычнее RAR, на примере WinRar
Код: Выделить весь код
@Echo Off
Set Mask="*.zip" "*.rar" 
Set "ARC="C:\Program Files\WinRAR\WinRAR.exe" x"

FOR %%f IN (%Mask%) DO (
	Md "%%~nf" 2>nul
	%ARC% "%%f" "%%~nf\" 
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 09-06-2018 в 12:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:07, 09-06-2018 | #5


Ветеран


Сообщения: 641
Благодарности: 200

Профиль | Отправить PM | Цитировать


на zip не сложнее
Код: Выделить весь код
@echo off
set "d=C:\Folder"
set "ar=%ProgramFiles%\7-Zip\7z.exe"
set "exp=7z"

pushd "%d%"
 for /f "delims=" %%a in ('dir /a-d/b "*.%exp%"') do "%ar%" x "%%a" -o"%%~na" -y
popd
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:40, 09-06-2018 | #6


Новый участник


Сообщения: 23
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, alpap, большое спасибо! Снова выручаете.

С конструкцией кода разобрался, подправил с учетом нюансов.
Предустановленный архиватор Winzip или 7-Zip использовать не предполагается.
Вторым файлом с батником в рабочую папку отправится консольный архиватор 7za.exe.
Путь к рабочей папке прописывать не хочется, он может/будет меняться.
Внес мелкие изменения, убрал пути и получил два варианта:

Вариант alpap:
Код: Выделить весь код
@echo off
set "d=%~dp0"
set "ar=7za.exe"
set "exp=zip"

pushd "%d%"
 for /f "delims=" %%a in ('dir /a-d/b "*.%exp%"') do %ar% x "%%a" -o"%%~na" -y
popd
Тут надо дописывать аналогичные блоки для архивов rar, 7z и т.д.
Поэтому чуть удобнее конструкция megaloman, где можно сразу перечислить все нужные архивы по маске:
Код: Выделить весь код
@Echo Off
Set Mask="*.7z" "*.rar" "*.zip"
Set "ARC="7za.exe" x"

FOR %%f IN (%Mask%) DO (
	Md "%%~nf" 2>nul
	%ARC% "%%f" -o"%%~nf\" -y
)
Вопрос решен, всё работает как надо.
Спасибо, уважаемые, за помощь и науку!

Отправлено: 16:21, 09-06-2018 | #7


Ветеран


Сообщения: 641
Благодарности: 200

Профиль | Отправить PM | Цитировать


NuclearBox,
если запуск из папки с архивами и в path прописан путь к 7z, то достаточно:
Код: Выделить весь код
for /f "delims=" %%a in ('dir /a-d/b') do 7z x "%%a" -o"%%~na" -y
распакует все архивы что сможет (а может ой как немало), на не архивы (например тот же bat в этой папке) ругнется в окне и проигнорирует (но не остановится и не вылетит)
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:26, 10-06-2018 | #8


Ветеран


Contributor


Сообщения: 22196
Благодарности: 6403

Профиль | Отправить PM | Цитировать


Цитата alpap:
распакует все архивы что сможет (а может ой как немало) »
Каааак пойдёт все найденные документы Office распаковывать . Не?
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:36, 10-06-2018 | #9


Ветеран


Сообщения: 641
Благодарности: 200

Профиль | Отправить PM | Цитировать


Iska,
это да, по любому, предполагал наличие только разнообразных распространенных архивов да может пару файлов txt, но конечно лучше все же, если нет уверенности в содержимом директории прописать возможные расширения и это тоже легко сделать сделать добавив их под dir
Код: Выделить весь код
...('dir /a-d/b "*.7z" "*.rar" "*.zip"')...
вообще, если увеличить несколько масштабы кода, можно сделать вариант для перебора всех возможных расширений установленной по штатному пути 7z
(надеюсь путь к dll и файлу string.txt действительно не отличается в зависимости от версий - не проверял)
Код: Выделить весь код
@echo off
set "d=C:\Folder"
set "ar=%ProgramFiles%\7-Zip\7z.exe"

call :r
pushd "%d%"
 for /f "delims=" %%a in ('dir /a-d/b %exp%') do "%ar%" x "%%a" -o"%%~na" -y
popd
pause& exit

:r
 "%ar%" x "%Programfiles%\7-Zip\7z.dll" -o$ "string.txt" -r
 for /f "delims=" %%f in ('dir /a-d/b/s "$\string.txt"') do (
  <"%%f" (for /f "delims=" %%a in ('find /n /v ""') do @>nul chcp 866& set "x=%%a"& cmd /v/c set "x=!x:*]^^=!")
 )
 for %%x in (%x%) do echo %%x|>nul find ":" && for /f "delims=:" %%a in ("%%x") do >>+<+ set /p exp=""*.%%a" "
 >nul 2>&1 del /q +& >nul 2>&1 rd /s /q $
exit /b

Последний раз редактировалось alpap, 10-06-2018 в 04:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:50, 10-06-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распаковка архивов в поддиректории с теми же именами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск и распаковка архивов по маске kirillius Скриптовые языки администрирования Windows 9 04-02-2015 08:37
CMD/BAT - Распаковка ВСЕХ архивов в папку с тем же именем death7lord Скриптовые языки администрирования Windows 8 05-10-2013 17:16
CMD/BAT - [решено] распаковка архивов по нужным папкам muguch Скриптовые языки администрирования Windows 28 14-09-2012 11:13
Разное - РАСПАКОВКА АРХИВОВ MZ (ОПК 3.19) Vamp1re Тест-форум 0 13-12-2010 15:03
распаковка больших архивов greeka Общий по FreeBSD 7 19-07-2004 09:21




 
Переход