![]() |
Проверка архива zip на наличие определенных файлов
Добрый день!
В папке хранятся много zip архивов. Нужно сделать скрипт проверки zip архивов на наличие в нем Файла1 & Файла2. Если такой архив находится, то копировать его в другую папку. |
Файла1 и Файла2 - есть
Файла1 - есть, Файла2 - нет Файла1 - нет, Файла2 - есть Файла1 и Файла2 - нет какой вариант? когда ответите, подумайте: для всех архивов идентичная проверка или для каждого своя, совпасть должно имя.расширение файла(ов) или кол-во (есть 1 файл или 2 или ни одного) |
Файла1 и Файла2 - есть.
в архиве должны быть как минимум 2 файла с определенными именами. Условие : обязательное присутствие обоих файлов в архиве с определенными именами. |
Цитата:
Цитата:
|
Цитата:
|
Iska верно. Копался, но такого никак не могу добиться.
|
FantomasAnand, Архиватора Zip у меня нет. Попробуйте. Не знаю, насколько код чувствителен к версии 7z. Я предположил, что в каждом архиве искомые имена уникальны, то есть не повторяются. Если это не так, можно переделать
Код:
@Echo Off |
ага, уже ответили, ну приложу свой вариант раз уже начал, хотя он похож на вариант megaloman, но как раз учитывал повторяемость файлов, т.е. должно быть минимум два заданных, допускается более 2х, но не менее, но эти 2 обязательно
"a.txt" и "b.txt" - если как минимум эти два файла будут в архиве, то все такие архивы будут сохранены в папку "C:\b_arch" Код:
@echo off |
Цитата:
Цитата:
Цитата:
ИМХО ....A тоже не обязательно такой атрибут. Мне не удалось под For затолкать вызов архиватора, чтобы присвоить переменной последнюю строку листинга архиватора. Пришлось делать промежуточный файл. Меня это гнетёт. |
Цитата:
Цитата:
Код:
@echo off |
Угу. Не хватает такой простой команды как у rar — «vb», отобразить только имена с путями.
|
Подправил, теперь просматривает и в глубь, проверял с именами файлов внутри, архивов и папок равных: "....A", единственно очень точным совпадением имен не утруждался
Код:
@echo off |
Цитата:
ИДЕЯ И ПРИНЦИП КОДА РАЗРАБОТАНА megaloman - Благодарности ему. (я только убрал временный файл и немного подрихтовал) Код:
@echo off |
Цитата:
мой исправленный вариант без промежуточного файла
Код:
@Echo Off параметры: Set "Exists="data1.cab" "data2.cab"" Set /A NExists=2 Вот вариант, который правильно обрабатывает архивы даже при наличии в них повторяющихся имён файлов
Код:
@Echo Off Set "Exists="data1.cab" "data2.cab" "setup.exe"" |
Цитата:
1 - a b c 2 - a b 3 - b c 1 и 2 - будут сохранены, проверялось. или что-то другое под этим имеется ввиду? |
alpap, Пусть имеется архив с множеством папок. В разных папках в этом архиве присутствует файл а, например. То есть мы его нашли там несколько раз, зато ни разу не нашли, допустим, b. Первый вариант это с радостью проглотит как искомый. А условие-то: одновременное наличие а и b. В данном случае важно знать характер архива. Если нет повторяющихся файлов в разных папках архива, то первый вариант работает быстрее. Второй вариант по отдельности выискивает каждый файл в архиве, то есть приходится в худшем случае архиватор вызывать несколько раз для каждого архивного файла.
|
Ааа, вон оно что, о таком варианте я как-то даже не подумал проверить - не хватило фантазии, надо запомнить.
|
alpap, megaloman, не смотрел код. Возможность указать оба искомых файла в командной строке:
Код:
"C:\Program Files\7-Zip\7z.exe" l -r "Sample.7z" "File1.txt" "File2.txt" |
Iska, угу, мой первый вариант
|
Iska,
так точно пост #13 |
Время: 13:42. |
Время: 13:42.
© OSzone.net 2001-