Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Двойное условие в IF (http://forum.oszone.net/showthread.php?t=260356)

kelevara 11-05-2013 23:48 2148344

Двойное условие в 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


Foreigner 12-05-2013 00:16 2148356

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%"


kelevara 12-05-2013 00:34 2148362

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

Iska 12-05-2013 01:57 2148388

Цитата:

Цитата kelevara
но хотелось бы, чтобы в качестве результата выводилось именно имя файла и его размер. »

А он что делает?!

kelevara 12-05-2013 09:37 2148455

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

Foreigner 12-05-2013 10:03 2148466

kelevara,
Попробуйте еще раз, второй вариант. От 0:33.

Iska 12-05-2013 16:10 2148630

Цитата:

Цитата 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


megaloman 12-05-2013 17:15 2148681

Код:

@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 делается, как ни странно, намного быстрее.

Georgio 12-05-2013 17:27 2148690

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 12-05-2013 19:38 2148783

Ребята, всем огромное спасибо! Все варианты подходят, даже не знаю, что выбрать в итоге :)

Iska 12-05-2013 20:08 2148797

Цитата:

Цитата kelevara
даже не знаю, что выбрать в итоге »

kelevara, выбирайте всё: «оба лучше».


Время: 17:30.

Время: 17:30.
© OSzone.net 2001-