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

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

tr011_tmn 20-02-2015 11:46 2473775

определение максимального значения имени подкаталога
 
Доброго времени суток коллеги. Помогите с проблемой которая ставит меня в тупик.

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

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

Цитата:

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


Iska 20-02-2015 12:05 2473786

Цитата:

Цитата tr011_tmn
Каким образом можно определить максимальное значение имени подкаталога, »

Что есть «максимальное значение имени»? Что для Вас «максимальнее» — «1.2.2.5678» или «1.2.3.4567»?

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

gora 20-02-2015 12:16 2473792

Цитата:

Цитата Iska
а если будет «1.2.12.5678» или «1.2.9.4567» »

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

Iska 20-02-2015 12:45 2473809

Цитата:

Цитата gora
Делать сравнение чисел состоящих из четырех групп цифр мне доводилось (сравнение версий файлов), задача решаемая. »

Да, я именно об этом хотел узнать у автора темы.

tr011_tmn 20-02-2015 13:16 2473824

Цитата:

Цитата Iska
Да, я именно об этом хотел узнать у автора темы. »

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

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

Цитата:

Цитата tr011_tmn
соответственно 00.00.00.0001 будет меньше чем 99.99.99.9999. »

Значит у Вас могут быть незначащие нули в группах?
Какое тогда число больше в Вашем варианте:
1.2.3.4567 или 1.02.3.4567 ?

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

tr011_tmn 20-02-2015 13:38 2473836

Цитата:

Цитата gora
1.2.3.4567 или 1.02.3.4567 »

по моему разумению они равнозначны. Но 1.2.9.4567 будет меньше 1.02.10.4567.

gora 20-02-2015 13:40 2473837

Цитата:

Цитата tr011_tmn
по моему разумению они равнозначны »

Цитата:

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


tr011_tmn 20-02-2015 13:47 2473842

Цитата:

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

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

gora 20-02-2015 13:51 2473843

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 2473885

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 2474009

Цитата:

Цитата gora
tr011_tmn, попробуйте »

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

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

Foreigner 20-02-2015 22:12 2474010

tr011_tmn, Согласен. Метод сомнительный.


Время: 08:11.

Время: 08:11.
© OSzone.net 2001-