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

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

Ответить
Настройки темы
CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов

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


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

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


Добрый день!

В папке хранятся много zip архивов. Нужно сделать скрипт проверки zip архивов на наличие в нем Файла1 & Файла2. Если такой архив находится, то копировать его в другую папку.

Отправлено: 18:13, 07-11-2017

 

Ветеран


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

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


Файла1 и Файла2 - есть
Файла1 - есть, Файла2 - нет
Файла1 - нет, Файла2 - есть
Файла1 и Файла2 - нет
какой вариант?
когда ответите, подумайте: для всех архивов идентичная проверка или для каждого своя, совпасть должно имя.расширение файла(ов) или кол-во (есть 1 файл или 2 или ни одного)

Последний раз редактировалось alpap, 07-11-2017 в 18:34.


Отправлено: 18:28, 07-11-2017 | #2



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

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


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


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

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


Файла1 и Файла2 - есть.
в архиве должны быть как минимум 2 файла с определенными именами. Условие : обязательное присутствие обоих файлов в архиве с определенными именами.

Отправлено: 11:43, 09-11-2017 | #3


Ветеран


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

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


Цитата FantomasAnand:
обязательное присутствие обоих файлов в архиве »
это тоже важно
Цитата alpap:
для всех архивов идентичная проверка или для каждого своя »
т.е. файлы именно: a.txt и b.txt должны оба присутствовать в каждом архиве или в другом архиве будут c.txt и d.txt, в третьем 1.txt и 2.txt

Отправлено: 12:38, 09-11-2017 | #4


Ветеран


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

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


Цитата alpap:
т.е. файлы именно: a.txt и b.txt должны оба присутствовать в каждом архиве или в другом архиве будут c.txt и d.txt, в третьем 1.txt и 2.txt »
Я понял так: есть набор архивов. Надо получить листинг оглавления каждого из архивов, и те архивы, в которых будут находиться пара искомых имён файлов, скопировать по заданному адресу. Т.е. всего два имени файлов у нас есть, и их надо найти в оглавлениях.

Отправлено: 13:01, 09-11-2017 | #5


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


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

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


Iska верно. Копался, но такого никак не могу добиться.

Отправлено: 17:04, 09-11-2017 | #6


Ветеран


Contributor


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

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


FantomasAnand, Архиватора Zip у меня нет. Попробуйте. Не знаю, насколько код чувствителен к версии 7z. Я предположил, что в каждом архиве искомые имена уникальны, то есть не повторяются. Если это не так, можно переделать
Код: Выделить весь код
@Echo Off

Set "FileIn=Z:\Box_In\*.zip"

Set "Exists="data1.cab" "data2.cab""
Set /A NExists=2

Set "BoxOut=Z:\Box_Out"

Set "Arc="C:\Program Files\7-Zip\7z.exe" l -r"

Set "FileTmp=%Tmp%\%~nx0.tmp"
FOR /F "usebackq delims=" %%i IN (`dir "%FileIn%" /S /B /A:-D 2^>nul`) DO Call :CheckZip "%%i"
Del "%FileTmp%" 2>nul

GoTo :Eof

:CheckZip
	%Arc% %1 %Exists% >"%FileTmp%"
	Set /A N=0
	FOR /F "usebackq tokens=5 delims= " %%s IN ("%FileTmp%") DO Set /A N=%%s 2>nul
	If %N% GEQ %NExists% Copy %1 "%BoxOut%" >nul
GoTo :Eof

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

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

Отправлено: 22:57, 09-11-2017 | #7


Ветеран


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

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


ага, уже ответили, ну приложу свой вариант раз уже начал, хотя он похож на вариант megaloman, но как раз учитывал повторяемость файлов, т.е. должно быть минимум два заданных, допускается более 2х, но не менее, но эти 2 обязательно

"a.txt" и "b.txt" - если как минимум эти два файла будут в архиве, то все такие архивы будут сохранены в папку "C:\b_arch"

Код: Выделить весь код
@echo off
set "d_out=C:\b_arch"
set "exp=7z"
set "ar=%ProgramFiles%\7-Zip\7z.exe"
set "zf1=a.txt"& set "zf2=b.txt"

if not exist "%d_out%" md "%d_out%"
for /f "delims=" %%A in ('2^>nul dir /a-d/b "*.%exp%"') do (
 setlocal enabledelayedexpansion
  for /f "tokens=5*" %%a in ('"%ar%" l "%%A"^|findstr /c:" ....A "^|findstr /c:"%zf1%" /c:"%zf2%"') do set /a n+=1& set "a!n!=%%A"
  if not "!a2!"=="" >nul copy "!a2!" "%d_out%"
 endlocal
)
pause

Последний раз редактировалось alpap, 10-11-2017 в 00:06.


Отправлено: 23:58, 09-11-2017 | #8


Ветеран


Contributor


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

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


Цитата alpap:
ну приложу свой вариант раз уже начал, хотя он похож на вариант megaloman »
Цитата Мао Дзе Дун:
Пусть расцветают сто цветов, пусть соперничают сто школ
Ни у кого нет права на абсолютную истину.
Цитата alpap:
findstr /c:"%zf1%" »
ищем файл a.txt ? и находим tralala.txt тоже? Надо сразу ИМХО при вызове архиватора перечислить искомое.
ИМХО ....A тоже не обязательно такой атрибут.
Мне не удалось под For затолкать вызов архиватора, чтобы присвоить переменной последнюю строку листинга архиватора.
Пришлось делать промежуточный файл.
Меня это гнетёт.

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


Последний раз редактировалось megaloman, 10-11-2017 в 00:45.


Отправлено: 00:34, 10-11-2017 | #9


Ветеран


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

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


Цитата megaloman:
и находим tralala.txt тоже? »
Да. После того как начал писать код пропало все желание делать эту задачу на cmd, поэтому и
Цитата megaloman:
....A тоже »
и -r не использовал, да что там говорить, здесь имена заданы и найти их можно постаравшись, а вот вывести все имена чтобы можно было с ними работать мне когда-то пришлось такую конструкцию писать:
Код: Выделить весь код
@echo off
set "exp=7z"
set "arch=%ProgramFiles%\7-Zip\7z.exe"
for /f "delims=" %%a in ('dir /a-d/b "*.%exp%"') do call :# "%%a"
pause& exit

:#
 setlocal enabledelayedexpansion
  for /f "delims=:" %%a in ('""%arch%" l "%~1"|findstr /rn /c:"^---""') do set /a n+=1& set "v!n!=%%a"& set /a "nd=v1+1,kd=v2-1"  
  for /f "tokens=5*" %%a in ('"for /l %%a in (!nd!,1,!kd!) do @"%arch%" l "%~1"|find /n /v ""|find "[%%a]""') do echo %%b
 endlocal
exit /b
Это мыслимо? Это просто вывод имен!

Отправлено: 12:26, 10-11-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Массовая замена определенных файлов в определенных папках CMD/BAT urabusu Скриптовые языки администрирования Windows 6 27-06-2019 21:06
Проверка на наличие интернета Qweezy AutoIt 1 14-06-2017 13:37
CMD/BAT - [решено] Проверка папки на наличие файлов за сегодня FantomasAnand Скриптовые языки администрирования Windows 1 26-02-2015 04:04
CMD/BAT - Проверка на наличие процесса tazik9 Скриптовые языки администрирования Windows 0 23-01-2011 16:56
CMD/BAT - [решено] Проверка установки определенных файлов в директорию korenza Скриптовые языки администрирования Windows 17 03-06-2010 13:25




 
Переход