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

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

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

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


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

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


Изменения
Автор: pawok_21
Дата: 02-08-2016
Добрый день.
Возникла потребность в bat файле с функцией разархивирования группы RAR архивов по маске наименования файлов с созданием соответствующих каталогов.
Пример:
Цитата:
-папка с архивами- -извлекаемые файлы-
С:\Folder\archiv1.rar --->abc_123456.txt
С:\Folder\archiv1.rar --->qwer_987654.txt
***
С:\Folder\archiv2.rar --->abc_654321.txt
С:\Folder\archiv2.rar --->qwer_456789.txt
Необходимый результат разархивации по флагу "_"
Цитата:
С:\Folder-rez\abc_\abc_123456.txt
С:\Folder-rez\abc_\abc_654321.txt
***
С:\Folder-rez\qwer_\qwer_987654.txt
С:\Folder-rez\qwer_\qwer_456789.txt
Заранее выражаю свою благодарность за любую помощь в решении проблемы.

Отправлено: 12:01, 02-08-2016

 

Ветеран


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

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


Код: Выделить весь код
@echo off
set "d_in=C:\Folder"
set "d_out=C:\Folder-rez"
for /f "delims=" %%A in ('dir/a-d/b "%d_in%\*.*"') do (
 for /f "tokens=2* delims=_ " %%a in ('""%ProgramFiles%\7-Zip\7z.exe" x "%%A" -o"%%~nA"|find "Extracting""') do (
  if not exist "%d_out%\%%a" md "%d_out%\%%a"
  for %%B in ("%d_out%\%%a") do set n=0& call :l "%%~nA" "%%~nB" "%%a" "%%b"
 )
 rd /s /q "%%~nA"
)
exit
 
:l
 if "%~2"=="%~3" if not exist "%d_out%\%~3\%~3%n%_%~4" (copy "%~1\%~3_%~4" "%d_out%\%~3\%~3%n%_%~4") else (set/a n+=1& goto l)
exit/b
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:13, 07-08-2016 | #2



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

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


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


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

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


alpap, Спасибо, все четоко отработало!

Отправлено: 09:58, 08-08-2016 | #3


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


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

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


Цитата alpap:
@echo off
set "d_in=C:\Folder"
set "d_out=C:\Folder-rez"
for /f "delims=" %%A in ('dir/a-d/b "%d_in%\*.*"') do (
for /f "tokens=2* delims=_ " %%a in ('""%ProgramFiles%\7-Zip\7z.exe" x "%%A" -o"%%~nA"|find "Extracting""') do (
if not exist "%d_out%\%%a" md "%d_out%\%%a"
for %%B in ("%d_out%\%%a") do set n=0& call :l "%%~nA" "%%~nB" "%%a" "%%b"
)
rd /s /q "%%~nA"
)
exit
:l
if "%~2"=="%~3" if not exist "%d_out%\%~3\%~3%n%_%~4" (copy "%~1\%~3_%~4" "%d_out%\%~3\%~3%n%_%~4") else (set/a n+=1& goto l)
exit/b »
Задача немного усложнилась. Нужно добавить проверку на расширение извлекаемых фалов. К примеру в архивы помещены файлы *.jpg а нужно извлечь только файлы формата *.txt . Как добавить такую проверку в код?

Отправлено: 13:39, 18-07-2017 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Folder" 
Set "BoxOut=Z:\Folder-Rez"

Set "Flag=_"
Set "ExtOut=txt"

Set "ExtIn=rar"
Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" e -y"

Set "BoxTmp=%BoxOut%\%~nx0.tmp"
Rd "%BoxTmp%" /S /Q 2>nul
Md "%BoxTmp%"

Pushd "%BoxTmp%" &&(
	%Arc% "%BoxIn%\*.%ExtIn%" "*%Flag%*.%ExtOut%" 
	For %%f In ("*.%ExtOut%") Do If Exist "%%f" (
		FOR /F "usebackq delims=%Flag%" %%s IN ('%%f') DO (
			Md "%BoxOut%\%%s%Flag%" 2>nul &Move "%%s%Flag%*.%ExtOut%" "%BoxOut%\%%s%Flag%\"
		)
	)
)
Popd
Rd "%BoxTmp%" /S /Q 2>nul

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


Последний раз редактировалось megaloman, 19-07-2017 в 09:26.

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

Отправлено: 08:20, 19-07-2017 | #5


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


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

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


Цитата megaloman:
Скрытый текст
@Echo Off
Set "BoxIn=Z:\Folder"
Set "BoxOut=Z:\Folder-Rez"
Set "Flag=_"
Set "ExtOut=txt"
Set "ExtIn=rar"
Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" e -y"
Set "BoxTmp=%BoxOut%\%~nx0.tmp"
Rd "%BoxTmp%" /S /Q 2>nul
Md "%BoxTmp%"
Pushd "%BoxTmp%" &&(
%Arc% "%BoxIn%\*.%ExtIn%" "*%Flag%*.%ExtOut%"
For %%f In ("*.%ExtOut%") Do If Exist "%%f" (
FOR /F "usebackq delims=%Flag%" %%s IN ('%%f') DO (
Md "%BoxOut%\%%s%Flag%" &&Move "%%s%Flag%*.%ExtOut%" "%BoxOut%\%%s%Flag%\"
)
)
)
Popd
Rd "%BoxTmp%" /S /Q 2>nul
»
Спасибо огромное, все работает.
Я так понял в процессе работы создается папка темп, по завершению работы все разархивированные фалы перемещаются в нужную папку. Надеюсь не зависнет при копировании, так как итоговых файлов на 10-ки Гигабайт и порядка 2-3 млн. файлов.

Отправлено: 09:32, 19-07-2017 | #6


Ветеран


Contributor


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

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


pawok_21, обратите внимание, я исправил неточность в коде, а Вы этого не увидели, вместо
Md "%BoxOut%\%%s%Flag%" &&Mov ......
Надо
Код: Выделить весь код
Md "%BoxOut%\%%s%Flag%" 2>nul &Move "%%s%Flag%*.%ExtOut%" "%BoxOut%\%%s%Flag%\"
Это существенно при повторном запуске скрипта, когда выходные папки уже существуют.

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


Последний раз редактировалось megaloman, 20-07-2017 в 11:05.

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

Отправлено: 10:58, 20-07-2017 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - скрипт по копирвоанию и последующего удаления файлов по маске названия файла santey007 Скриптовые языки администрирования Windows 19 22-12-2015 10:43
CMD/BAT - Копирование файлов в папки по маске файла и маске папки (BAT) skyskiff Скриптовые языки администрирования Windows 7 20-09-2015 22:41
CMD/BAT - [решено] Поиск и распаковка архивов по маске kirillius Скриптовые языки администрирования Windows 9 04-02-2015 08:37
CMD/BAT - Распаковка большого количества zip (пакетная распаковка zip из разных папок) dark-------13 Скриптовые языки администрирования Windows 3 12-03-2013 13:00
CMD/BAT - розархивация файлов по маске с архива отсортированого по датах VitHAK Скриптовые языки администрирования Windows 1 28-12-2009 11:07




 
Переход