|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов |
|
CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
|
Новый участник Сообщения: 48 |
Добрый день!
В папке хранятся много zip архивов. Нужно сделать скрипт проверки zip архивов на наличие в нем Файла1 & Файла2. Если такой архив находится, то копировать его в другую папку. |
|
Отправлено: 18:13, 07-11-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Угу. Не хватает такой простой команды как у rar — «vb», отобразить только имена с путями.
|
Отправлено: 13:11, 10-11-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Подправил, теперь просматривает и в глубь, проверял с именами файлов внутри, архивов и папок равных: "....A", единственно очень точным совпадением имен не утруждался
@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 ('dir /a-d/b/s "*.%exp%"') do ( setlocal enabledelayedexpansion for /f "tokens=5*" %%a in ('""%ar%" l -r "%%A"|findstr /r /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 в 14:11. Отправлено: 13:42, 10-11-2017 | #12 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
ИДЕЯ И ПРИНЦИП КОДА РАЗРАБОТАНА megaloman - Благодарности ему. (я только убрал временный файл и немного подрихтовал) @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" for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "*.%exp%"') do call :# "%%a" "%d_out%" "%zf1%" "%zf2%" "%ar%" pause& exit :# [Архив] [Путь сохранения] [Файл1] [Файл2] [Архиватор] for /f "tokens=5" %%a in ('""%~5" l -r "%~1" "%~3" "%~4""') do 2>nul set /a n=%%a if %n% geq 2 (if not exist "%~2" md "%~2")& >nul copy "%~1" "%~2" exit /b |
|
Отправлено: 15:35, 10-11-2017 | #13 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
мой исправленный вариант без промежуточного файла
@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" FOR /F "usebackq delims=" %%i IN (`dir "%FileIn%" /S /B /A:-D 2^>nul`) DO Call :CheckZip "%%i" GoTo :Eof :CheckZip FOR /F "tokens=5 delims= " %%s IN ('"%Arc% %1 %Exists%"') DO Set /A N=%%s 2>nul If %N% GEQ %NExists% Copy %1 "%BoxOut%" >nul GoTo :Eof параметры: Set "Exists="data1.cab" "data2.cab"" Set /A NExists=2 Вот вариант, который правильно обрабатывает архивы даже при наличии в них повторяющихся имён файлов
@Echo Off Set "FileIn=Z:\Box_In\*.zip" Set "Exists="data1.cab" "data2.cab" "setup.exe"" Set "BoxOut=Z:\Box_Out" Set "Arc="C:\Program Files\7-Zip\7z.exe" l -r" FOR /F "usebackq delims=" %%i IN (`dir "%FileIn%" /S /B /A:-D 2^>nul`) DO Call :FilesExists "%%i" GoTo :Eof :FilesExists FOR %%f IN (%Exists%) DO Call :CheckZip %1 "%%~f" &&GoTo :Eof Copy %1 "%BoxOut%" >nul GoTo :Eof :CheckZip Set /A N=0 FOR /F "tokens=5 delims= " %%s IN ('"%Arc% %1 %2"') DO Set /A N=%%s 2>nul Exit /B %N% Set "Exists="data1.cab" "data2.cab" "setup.exe"" |
|
------- Последний раз редактировалось megaloman, 10-11-2017 в 19:10. Отправлено: 18:03, 10-11-2017 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
1 - a b c 2 - a b 3 - b c 1 и 2 - будут сохранены, проверялось. или что-то другое под этим имеется ввиду? |
|
Отправлено: 19:29, 10-11-2017 | #15 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать alpap, Пусть имеется архив с множеством папок. В разных папках в этом архиве присутствует файл а, например. То есть мы его нашли там несколько раз, зато ни разу не нашли, допустим, b. Первый вариант это с радостью проглотит как искомый. А условие-то: одновременное наличие а и b. В данном случае важно знать характер архива. Если нет повторяющихся файлов в разных папках архива, то первый вариант работает быстрее. Второй вариант по отдельности выискивает каждый файл в архиве, то есть приходится в худшем случае архиватор вызывать несколько раз для каждого архивного файла.
|
------- Отправлено: 19:36, 10-11-2017 | #16 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Ааа, вон оно что, о таком варианте я как-то даже не подумал проверить - не хватило фантазии, надо запомнить.
|
Отправлено: 19:40, 10-11-2017 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:49, 10-11-2017 | #18 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska, угу, мой первый вариант
|
------- Отправлено: 20:20, 10-11-2017 | #19 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Iska,
так точно пост #13 |
Отправлено: 23:10, 10-11-2017 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|