CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
-
alpap
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Угу. Не хватает такой простой команды как у rar — «vb», отобразить только имена с путями.
-
alpap
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Подправил, теперь просматривает и в глубь, проверял с именами файлов внутри, архивов и папок равных: "....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
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Цитата megaloman:
Пришлось делать промежуточный файл.
Меня это гнетёт.
Вот без временного файла
ИДЕЯ И ПРИНЦИП КОДА РАЗРАБОТАНА megaloman - Благодарности ему.
(я только убрал временный файл и немного подрихтовал)
Код:
Пришлось делать промежуточный файл.
Меня это гнетёт.
CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Вот без временного файла
ИДЕЯ И ПРИНЦИП КОДА РАЗРАБОТАНА 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-
megaloman
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Цитата megaloman:
Пришлось делать промежуточный файл.
Меня это гнетёт.
Спасибо alpap, подсмотрел как под For затолкать вызов архиватора.
мой исправленный вариант без промежуточного файла
[spoiler]Код: [/spoiler]
В моём варианте может рассматриваться одновременное наличие нескольких файлов, в частности, двух:
параметры:
Set "Exists="data1.cab" "data2.cab""
Set /A NExists=2
Вот вариант, который правильно обрабатывает архивы даже при наличии в них повторяющихся имён файлов
[spoiler]Код: [/spoiler]
Здесь для примера приведено наличие трёх файлов
Set "Exists="data1.cab" "data2.cab" "setup.exe""
Пришлось делать промежуточный файл.
Меня это гнетёт.
CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Спасибо alpap, подсмотрел как под For затолкать вызов архиватора.
мой исправленный вариант без промежуточного файла
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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
Вот вариант, который правильно обрабатывает архивы даже при наличии в них повторяющихся имён файлов
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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""
-
alpap
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Цитата megaloman:
при наличии в них повторяющихся имён файлов
ваш здесь первый вариант тоже прекрасно справляется при наличии одинаковых файлов в разных архивах (a и b, например заданы)
1 - a b c
2 - a b
3 - b c
1 и 2 - будут сохранены, проверялось.
или что-то другое под этим имеется ввиду?
при наличии в них повторяющихся имён файлов
CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
ваш здесь первый вариант тоже прекрасно справляется при наличии одинаковых файлов в разных архивах (a и b, например заданы)
1 - a b c
2 - a b
3 - b c
1 и 2 - будут сохранены, проверялось.
или что-то другое под этим имеется ввиду?
-
megaloman
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
alpap, Пусть имеется архив с множеством папок. В разных папках в этом архиве присутствует файл а, например. То есть мы его нашли там несколько раз, зато ни разу не нашли, допустим, b. Первый вариант это с радостью проглотит как искомый. А условие-то: одновременное наличие а и b. В данном случае важно знать характер архива. Если нет повторяющихся файлов в разных папках архива, то первый вариант работает быстрее. Второй вариант по отдельности выискивает каждый файл в архиве, то есть приходится в худшем случае архиватор вызывать несколько раз для каждого архивного файла.
-
alpap
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Ааа, вон оно что, о таком варианте я как-то даже не подумал проверить - не хватило фантазии, надо запомнить.
-
Iska
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
alpap, megaloman, не смотрел код. Возможность указать оба искомых файла в командной строке:
Код:
использовалась?
Код:
Код: Выделить всё
"C:\Program Files\7-Zip\7z.exe" l -r "Sample.7z" "File1.txt" "File2.txt"использовалась?
-
megaloman
Re: CMD/BAT - [решено] Проверка архива zip на наличие определенных файлов
Iska, угу, мой первый вариант
-
alpap