Двойное условие в IF
Доброго дня!
Мне необходимо найти файл с максимальным размером определенного расширения среди всех файлов в каталоге и его подкаталогах. Ранее с похожей задачей мне тут помогли и тот скрипт я взял за основу. Сам алгоритм предельно ясен, но вот как в подпрограмме объединить две проверки в IF в одну - меня начинает клинить. Вот что я "родил":
Код:
@ECHO Off
::задается целевая директория
SET MyDir=C:\lab1\wingraf
::задается расширение файлов, размер которых будет учитываться
SET Ras=.gif
::вызывается подпрограмма _subdir
SET /a max = 0
Call :_subdir %MyDir% %Ras%
::вывод на экран сообщений
ECHO Max size of %Ras%-file = %Size%
ECHO Name this file - %Name%
Pause>Nul
Exit
:_subdir
::перебераем файлы в целевой директории и ее подкаталогах и если их расширение соответстует заданному, то проверяем на максимальный размер
FOR /R %1 %%s IN (*) DO IF %%~xs==%2 (if %%~zn GEQ %max% (SET %Size% = %%~zn SET %Name% = %%~ns)
EXIT /B
|
kelevara,
можно просто dir-ом:
Код:
@echo off
setlocal enabledelayedexpansion
set size=0
for /f "delims=" %%i in (' dir /b /s "c:\lab1\wingraf\*.gif" ') do (
if %%~zi geq !size! set "file=%%~fi" && set size=%%~zi
)
echo %size% "%file%"
|
Foreigner, вариант рабочий, но хотелось бы, чтобы в качестве результата выводилось именно имя файла и его размер.
|
Цитата:
Цитата kelevara
но хотелось бы, чтобы в качестве результата выводилось именно имя файла и его размер. »
|
А он что делает?!
|
Iska, указанная программа выводит на экран полный путь к самому большому файлу указанного расширения. А про его размер ничего не говорит, к сожалению.
|
kelevara,
Попробуйте еще раз, второй вариант. От 0:33.
|
Цитата:
Цитата kelevara
А про его размер ничего не говорит, к сожалению. »
|
А каков его размер в реальности?
Имя и размер ;):
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq tokens=3,4" %%i in (
`dir /s /a:-d /-c ".\*.*" ^| findstr.exe /v /r /c:"^$" /c:"^ .*$" ^| sort.exe /r /+18`
) do echo %%i %%j & goto :Out
:Out
endlocal
exit /b 0
|
Код:
@Echo off
cls
Set Where=E:\Audio
Set Ext=mp3
Set /A S=-1
FOR /F "usebackq delims=" %%d IN (`Dir "%Where%\" /B /S /A:D 2^>nul`) DO Call :ForSize "%%d\*.%Ext%"
Echo %S% %Name%
GoTo :Eof
:ForSize
FOR /F "usebackq delims=" %%f IN (`Dir %1 /B /S /A:-D /O:-S 2^>nul`) DO (
If %S% LSS %%~zf Set S=%%~zf&Set Name=%%f
GoTo :Eof
)
Вот короче код, аналогичный тому, что у Foreigner, не знаю, что сделается быстрее
Код:
@Echo off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set Where=E:\Audio
Set Ext=mp3
Set /A S=-1
FOR /F "usebackq delims=" %%f IN (`Dir "%Where%\*.%Ext%" /B /S /A:-D 2^>nul`) DO (
If !S! LSS %%~zf Set S=%%~zf&Set Name=%%f
)
Echo %S% %Name%
Похоже, мой первый код делается всё-таки быстрее, но код от Iska делается, как ни странно, намного быстрее.
|
kelevara! "Верным путём идёте, товарищ!" Просто у Вас несколько неточностей. Вот так работает:
Код:
@ECHO OFF
::задается целевая директория
SET MyDir=C:\lab1\wingraf
::задается расширение файлов, размер которых будет учитываться
SET Ras=.gif
::вызывается подпрограмма _subdir
SET Size=0
CALL :_subdir %MyDir% %Ras%
::вывод на экран сообщений
ECHO Max size of %Ras% file = %Size%
ECHO Name of this file - %Name%
PAUSE>nul
EXIT
:_subdir
::перебираем файлы в целевой директории и ее подкаталогах и, если их расширение соответствует заданному, проверяем на максимальный размер
FOR /R %1 %%s IN (*) DO IF %%~xs==%2 IF %%~zs GEQ %Size% SET Size=%%~zs&&SET Name=%%~ns
EXIT /B
|
Ребята, всем огромное спасибо! Все варианты подходят, даже не знаю, что выбрать в итоге :)
|
Цитата:
Цитата kelevara
даже не знаю, что выбрать в итоге »
|
kelevara, выбирайте всё: «оба лучше».
|
Время: 17:30.
© OSzone.net 2001-