Показать полную графическую версию : [решено] определение максимального значения имени подкаталога
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
Каким образом можно определить максимальное значение имени подкаталога, и задать его переменной для дальнейшего использования внутри тела скрипта?
определить максимальное значение имени подкаталога, и задать его переменной »
@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
Каким образом можно определить максимальное значение имени подкаталога, »
Что есть «максимальное значение имени»? Что для Вас «максимальнее» — «1.2.2.5678» или «1.2.3.4567»?
gora, а если будет «1.2.12.5678» и «1.2.9.4567»?
а если будет «1.2.12.5678» или «1.2.9.4567» »
"максимальное значение" будет у 1.2.9.4567, а 1.2.12.5678 будет иметь "наименьшее значение" по "правилам сортировки". Коллега, я понимаю Вы к чему, но ТС не задавал таких условий и получил простейшее решение, может оно ему достаточно. Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. Каков заказ - таково и решение. :)
Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. »
Да, я именно об этом хотел узнать у автора темы.
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, что обратил на это внимание. Конечно можно уповать на то что в моем случае только последний октет имени будет меняться но стоит учитывать и исключения.
соответственно 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.
по моему разумению они равнозначны »
Числа то математически равны, но каталоги то разные! »
tr011_tmn
20-02-2015, 13:47
Числа то математически равны, но каталоги то разные! »
понял смысл вопроса, получается необходимо сравнивать каждый октет математически, разбивая значение имени подкаталога на составляющие, и на выходе получать большее.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.