определение максимального значения имени подкаталога
Доброго времени суток коллеги. Помогите с проблемой которая ставит меня в тупик.
есть каталог содержимое которого состоит из подкаталогов типа:
Код:
%Setpath%\1.2.2.5678
%Setpath%\1.2.3.4567
%Setpath%\1.2.3.5678
%Setpath%\1.2.3.6789
Каким образом можно определить максимальное значение имени подкаталога, и задать его переменной для дальнейшего использования внутри тела скрипта?
|
Цитата:
Цитата tr011_tmn
определить максимальное значение имени подкаталога, и задать его переменной »
|
Код:
@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
|
Цитата:
Цитата tr011_tmn
Каким образом можно определить максимальное значение имени подкаталога, »
|
Что есть «максимальное значение имени»? Что для Вас «максимальнее» — «1.2.2.5678» или «1.2.3.4567»?
gora, а если будет «1.2.12.5678» и «1.2.9.4567»?
|
Цитата:
Цитата Iska
а если будет «1.2.12.5678» или «1.2.9.4567» »
|
"максимальное значение" будет у 1.2.9.4567, а 1.2.12.5678 будет иметь "наименьшее значение" по "правилам сортировки". Коллега, я понимаю Вы к чему, но ТС не задавал таких условий и получил простейшее решение, может оно ему достаточно. Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. Каков заказ - таково и решение. :)
|
Цитата:
Цитата gora
Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. »
|
Да, я именно об этом хотел узнать у автора темы.
|
Цитата:
Цитата Iska
Да, я именно об этом хотел узнать у автора темы. »
|
в том случае который подразумевается мной
%Setpath%\1.2.2.5678 будет меньше чем %Setpath%\1.2.3.4567 и соответственно 00.00.00.0001 будет меньше чем 99.99.99.9999. На самом деле сам виноват что не уточнил сразу этот аспект и спасибо Iska, что обратил на это внимание. Конечно можно уповать на то что в моем случае только последний октет имени будет меняться но стоит учитывать и исключения.
|
Цитата:
Цитата tr011_tmn
соответственно 00.00.00.0001 будет меньше чем 99.99.99.9999. »
|
Значит у Вас могут быть незначащие нули в группах?
Какое тогда число больше в Вашем варианте:
1.2.3.4567 или 1. 02.3.4567 ?
Числа то математически равны, но каталоги то разные!
|
Цитата:
Цитата gora
1.2.3.4567 или 1.02.3.4567 »
|
по моему разумению они равнозначны. Но 1.2.9.4567 будет меньше 1.02.10.4567.
|
Цитата:
Цитата tr011_tmn
по моему разумению они равнозначны »
|
Цитата:
Цитата gora
Числа то математически равны, но каталоги то разные! »
|
|
Цитата:
Цитата gora
Числа то математически равны, но каталоги то разные! »
|
понял смысл вопроса, получается необходимо сравнивать каждый октет математически, разбивая значение имени подкаталога на составляющие, и на выходе получать большее.
|
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
|
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"
|
сработало :-) спасибо огромнейшее
Foreigner, а ваш вариант сработал по аналогичному способу, но на выходе ответ был получен не верный, было взято не то значение на выходе.
|
tr011_tmn, Согласен. Метод сомнительный.
|
Время: 08:11.
© OSzone.net 2001-