0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
1

Извлечение файлов из архива по заданным условиям с переименованием

26.04.2018, 13:06. Показов 2329. Ответов 11
Метки нет (Все метки)

Добрый день!
Есть одна задача, но опыта для ее реализации пока недостаточно, поэтому нужна ваша помощь.
Есть папка, в которой располагаются архивы.
Необходимо в этой папке найти последний измененный zip архив и извлечь оттуда только pdf файлы (их всегда два).
Файлы извлекаются в другую директорию.
После извлечения файлы нужно переименовать, используя для этого часть названия архива.
Название архивов выглядит следующим образом: XXXXX__NNNNN_CCCC
файлы нужно переименовать NNNNN_1, и NNNNN_2

Буду очень признателен за помощь в решении такой задачи.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2018, 13:06
Ответы с готовыми решениями:

Извлечение из архива .ARJ с переименованием файлов
Добрый день! Есть папка с архивами типа dd.mm.yyyy namefile.arj внутри архива один файл без...

Извлечение файлов из архива
Вобщем есть кнопочка, при нажатии которой, извлекается файл в нужной мне директории. Как сделать...

Автоматическое извлечение файлов из архива
Доброго времени суток! Подскажите как сделать, так чтоб при добавления архива на сервер он сам...

Извлечение файлов из архива ZIP
В общем не получается нормально работать с zip файлами. Хотел работать стандартными средствами...

11
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
26.04.2018, 15:51 2
Лучший ответ Сообщение было отмечено Erl81 как решение

Решение

Erl81
если в именах архивов меняется часть: CCCC, то:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
set "D1=C:\Inbox"
set "D2=C:\Outbox"
set "arx=%ProgramFiles%\7-Zip\7z.exe"
set "ear=7z"
set "mask=pdf"
 
if not exist "%D2%" md "%D2%"
pushd "%D1%"
 for /f "tokens=3*" %%a in ('dir /a-d/od "*.%ear%"^|findstr/rc:"^[^ ]"') do set "nf=%%b"
 for /f "tokens=2 delims=_" %%a in ("%nf%") do set "nm=%%a"
 call :# "%arx%" "%nf%" $ "*.%mask%" "%nm%" "%D2%"
popd
pause& exit
 
:# [Архиватор] [Архив] [Врем. папка] [Расш. извл. файлов] [Маска имен] [Путь назначения]
 setlocal enabledelayedexpansion
  "%~1" x "%~2" -o"%~3" "%~4" -r
  for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "%~3"') do set /a n+=1& >nul move "%%a" "%~6\%~5_!n!%%~xa"
  rd /s /q "%~3"
 endlocal
exit /b
1
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
03.05.2018, 17:21  [ТС] 3
alpap, Большое спасибо за помощь!
в условии, правда, появились дополнительные уточнения, и пока так и добрался до рабочего варианта.
Поиск "свежих" архивов должен осуществляться также во всех подпапках и в имени архива меняются все значения, но вытаскивать необходимо только второе значение, в примере NNNNN
Поможете?
0
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
03.05.2018, 18:00 4
Erl81,
всего-то?
в строке 10 сделайте изменение:
Windows Batch file
1
2
3
...
for /f "tokens=3*" %%a in ('dir /a-d/s/od ...
...
1
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
04.05.2018, 16:03  [ТС] 5
alpap, Добавлял атрибут /s, нужный архив он находит, но выдает ошибку ERROR: не удается найти указанный файл. и далее название последнего измененного архива. Поэтому подумал, что возможно где-то нужно еще поправить. Если архив лежит в корне, то распаковывает отлично.
0
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.05.2018, 17:21 6
Цитата Сообщение от Erl81 Посмотреть сообщение
нужный архив он находит, но выдает ошибку ERROR: не удается найти указанный файл
а ну поясните, вы хотите найти последний измененный файл (т.е. архив) или последний измененный файл находящийся в архиве?
Проверьте где вы ищете: set "D1=C:\Inbox" (это мой путь)
Проверьте что ищете: set "ear=7z" (у меня архивы 7z, у вас возможно zip)
командой:
Windows Batch file
1
2
3
for /f "tokens=3*" %%a in ('dir /a-d/s/od "*.расширение"^|findstr/rc:"^[^ ]"') do set "nf=%%b"
echo %nf%
pause
запущенной из основной папки вы однозначно найдете последний измененный файл (архив) в этом каталоге.

Добавлено через 3 минуты
и сохраняйте код в кодировке OEM 866, может у вас есть кириллица в путях (именах).
1
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
07.05.2018, 18:49  [ТС] 7
Необходимо найти последний измененный архив, и код его находит, но файлы из архива не извлекает.
Добавил скрин простого примера вместе с ошибкой, возможно поможет.
Архивы все в zip. Кириллицы в именах нет.
Спасибо!
Миниатюры
Извлечение файлов из архива по заданным условиям с переименованием  
0
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
07.05.2018, 23:18 8
Цитата Сообщение от Erl81 Посмотреть сообщение
но файлы из архива не извлекает
сейчас заплАчу!

Цитата Сообщение от Erl81 Посмотреть сообщение
Название архивов выглядит следующим образом: XXXXX__NNNNN_CCCC
и посмотрите на свое название архива - нет разницы? Начинаете злить.

Давайте имена с десяток архивов или сделайте гарантированную маску и с четким описанием какой именно кусок имени файла вам нужен.
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
08.05.2018, 16:27  [ТС] 9
Название архивов такого вида "117019382_50363677_08.05.2018_5050058510"
первоначально архивы были из трех частей, вроде "117019382_50363677_08052018", какой указан в условии, поэтому я Вас понимаю, но нужна из названия только вторая часть, в примере "50363677", независимо от кол-ва частей в названии архива. Но, я уточнил, все последующие архивы, будут такого вида "117019382_50363677_08.05.2018_5050058510".
Очень надеюсь на Вашу помощь, а по ходу вопроса вникаю в тему, но пока не получается подправить так, чтобы заработало.
Спасибо!
0
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
08.05.2018, 21:24 10
Цитата Сообщение от Erl81 Посмотреть сообщение
независимо от кол-ва частей в названии архива
на bat я не возьмусь (нудно и длинно) разбирать такие имена или одинаковая маска всегда или просите не на bat.
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 6
10.05.2018, 15:29  [ТС] 11
ок, а как можно поправить, чтобы работало только для такого варианта?
117019382_50363677_08.05.2018_5050058510
или как раз этот вариант все усложняет?
0
4330 / 2120 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
12.05.2018, 01:22 12
Erl81,
да нет вообще разницы для какого варианта, если вам просто вторая часть имени после _ нужна
то что у вас не извлекает файлы проблема скорее в архиваторе. Если он x64, то скорее лежит не по этому пути:
set "arx=%ProgramFiles%\7-Zip\7z.exe"
найдите в папке своего архиватора 7z.exe и скопируйте его полный путь или пропишите в Path
вот пример работы с вашими новыми именами:
Извлечение файлов из архива по заданным условиям с переименованием

Извлечение файлов из архива по заданным условиям с переименованием

проблем нет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2018, 01:22
Помогаю со студенческими работами здесь

Извлечение файлов из архива ZIP
Привет друзья ! Возникла необходимость загружать файл из интернета (он в формате ZIP) и делать...

Извлечение из архива конкретного файла (файлов)
Доброго времени суток. Есть программа, которая по списку, находящемуся в ListBox копирует файлы в...

Извлечение файлов из SFX-архива в указанную папку
Всех с прошедшим!Не знал куда написать,напишу сюда Подскажите как сделать программу которая...

Извлечение файлов и папок из архива по указанному пути
Нужно каким-то образом извлечь все файлы в указанный путь из архива. Например. Нажимаешь на кнопку,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru