PDA

Показать полную графическую версию : [решено] определение максимального значения имени подкаталога


tr011_tmn
20-02-2015, 11:46
Доброго времени суток коллеги. Помогите с проблемой которая ставит меня в тупик.

есть каталог содержимое которого состоит из подкаталогов типа:

%Setpath%\1.2.2.5678
%Setpath%\1.2.3.4567
%Setpath%\1.2.3.5678
%Setpath%\1.2.3.6789


Каким образом можно определить максимальное значение имени подкаталога, и задать его переменной для дальнейшего использования внутри тела скрипта?

gora
20-02-2015, 12:04
определить максимальное значение имени подкаталога, и задать его переменной »
@Echo Off
:: Обрабатываемая папка
Set Folder=e:\Temp\3 3

For /F "tokens=*" %%i In ('Dir /B /A:D /O:N "%Folder%"') Do Set bignumcat=%%i
Echo bignumcat=%bignumcat%
Pause>Nul

Iska
20-02-2015, 12:05
Каким образом можно определить максимальное значение имени подкаталога, »
Что есть «максимальное значение имени»? Что для Вас «максимальнее» — «1.2.2.5678» или «1.2.3.4567»?

gora, а если будет «1.2.12.5678» и «1.2.9.4567»?

gora
20-02-2015, 12:16
а если будет «1.2.12.5678» или «1.2.9.4567» »
"максимальное значение" будет у 1.2.9.4567, а 1.2.12.5678 будет иметь "наименьшее значение" по "правилам сортировки". Коллега, я понимаю Вы к чему, но ТС не задавал таких условий и получил простейшее решение, может оно ему достаточно. Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. Каков заказ - таково и решение. :)

Iska
20-02-2015, 12:45
Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. »
Да, я именно об этом хотел узнать у автора темы.

tr011_tmn
20-02-2015, 13:16
Да, я именно об этом хотел узнать у автора темы. »

в том случае который подразумевается мной

%Setpath%\1.2.2.5678 будет меньше чем %Setpath%\1.2.3.4567 и соответственно 00.00.00.0001 будет меньше чем 99.99.99.9999. На самом деле сам виноват что не уточнил сразу этот аспект и спасибо Iska, что обратил на это внимание. Конечно можно уповать на то что в моем случае только последний октет имени будет меняться но стоит учитывать и исключения.

gora
20-02-2015, 13:25
соответственно 00.00.00.0001 будет меньше чем 99.99.99.9999. »
Значит у Вас могут быть незначащие нули в группах?
Какое тогда число больше в Вашем варианте:
1.2.3.4567 или 1.02.3.4567 ?

Числа то математически равны, но каталоги то разные!

tr011_tmn
20-02-2015, 13:38
1.2.3.4567 или 1.02.3.4567 »
по моему разумению они равнозначны. Но 1.2.9.4567 будет меньше 1.02.10.4567.

gora
20-02-2015, 13:40
по моему разумению они равнозначны »
Числа то математически равны, но каталоги то разные! »

tr011_tmn
20-02-2015, 13:47
Числа то математически равны, но каталоги то разные! »
понял смысл вопроса, получается необходимо сравнивать каждый октет математически, разбивая значение имени подкаталога на составляющие, и на выходе получать большее.

gora
20-02-2015, 13:51
tr011_tmn, попробуйте
@Echo Off
:: Обрабатываемая папка
Set Folder=e:\Temp\3 3

Set /A ma=0, mb=0, mc=0, md=0
For /F "tokens=*" %%i In ('Dir /B /A:D /O:N "%Folder%"') Do Call :compr %%i
Echo bignumcat=%oma%.%omb%.%omc%.%omd%
Pause>Nul
Exit

:compr
For /F "Tokens=1-4 delims=." %%a In ("%~1") Do Set ota=%%a& Set otb=%%b& Set otc=%%c& Set otd=%%d
Set /A ta=%ota%, tb=%otb%, tc=%otc%, td=%otd%
If %ma% GTR %ta% GoTo :EOF
If %ma% LSS %ta% GoTo _big
If %mb% GTR %tb% GoTo :EOF
If %mb% LSS %tb% GoTo _big
If %mc% GTR %tc% GoTo :EOF
If %mc% LSS %tc% GoTo _big
If %md% GTR %td% GoTo :EOF
If %md% LSS %td% GoTo _big
GoTo :EOF

:_big
Set oma=%ota%& Set omb=%otb%& Set omc=%otc%& Set omd=%otd%
Set /A ma=ta, mb=tb, mc=tc, md=td
GoTo :EOF

Foreigner
20-02-2015, 15:55
tr011_tmn,

@echo off
setlocal

set "setpath=C:\Path"

for /f "tokens=1-4 delims=." %%i in (' dir /b /ad "%setpath%" ') do call:1 %%i %%j %%k %%l
for /f "tokens=2 delims==" %%i in ('set var_') do set "var=%%i"
echo %var%
goto:eof

:1
set /a num=(1000000*%1)+(100000*%2)+(10000*%3)+%4
set "var_%num%=%1.%2.%3.%4"

tr011_tmn
20-02-2015, 22:09
tr011_tmn, попробуйте »

сработало :-) спасибо огромнейшее

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

Foreigner
20-02-2015, 22:12
tr011_tmn, Согласен. Метод сомнительный.




© OSzone.net 2001-2012