CMD/BAT - [решено] Сортировать числа (не цифры)

Ответить
Аватара пользователя
x0r

CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение x0r »

Привет.

Как можно отсортировать нормально, по числу, а не по символу ? Вот такой файл, нопример:



Код:

Код: Выделить всё

hls-1080p.m3u8
hls-480p.m3u8
hls-720p.m3u8
hls-360p.m3u8
hls-250p.m3u8

я его потом дальше обрабатываю, подставляю недостающую часть адреса, др. параметры и тяну wget-ом. Так вот, надо отсортировать числа по величине, дабы удобнее было ввести значение кот-е хочешь скачать. Чтоб первым шло самое большое, мешьнее... меньшее и т.д. Там могет быть и hls-2048p.m3u8[/i]



кусок из батнега где эти значения выбираются

[spoiler]Код:
[/spoiler]

Код: Выделить всё

:CIKL
SetLocal EnableDelayedExpansion
set /a zero=0
for /f "UseBackQ Delims=" %%A IN ("tmp") do (
  set /a zero+=1
  if !zero!==1 set a=%%A
  if !zero!==2 set b=%%A
  if !zero!==3 set c=%%A
  if !zero!==4 set d=%%A
  if !zero!==5 set e=%%A
)
echo ^      ¤¤¤                                                              ¤¤¤
echo ^          -------------------------------------------------------------------------
echo Что будем качать: (1)-%a%  (2)-%b%  (3)-%c%  (4)-%d%  (5)-%e%
echo ^             Q - Выход
echo ^          -------------------------------------------------------------------------
echo ^      ¤¤¤                                                              ¤¤¤
set /p answ=_:
if /i %answ% EQU q goto :EOF
if /i %answ% EQU 1 set m3u=%a%
if /i %answ% EQU 2 set m3u=%b%
if /i %answ% EQU 3 set m3u=%c%
if /i %answ% EQU 4 set m3u=%d%
if /i %answ% EQU 5 set m3u=%e%







sort сортирует тупо по первой цифре и выдает бред.

Это в батнегах вообще можно сделать?
Аватара пользователя
Patroklos

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение Patroklos »

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

И жестко привязать. Даже если динамически на мой взгляд здесь просится choice.
Аватара пользователя
Patroklos

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение Patroklos »

нет, не динамически. это просто файл со списком доступных "качеств". Для каждой новой закачки он будет отличаться только колличеством доступных "качеств". Может быть больше, может быть меньше... но такой же формат, отличия в колличестве строк.

А как это будет с choice ?



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

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение Patroklos »

Вот скрипт от Иски. Он его кому то тут давал. Адаптируй его под себя. Там где 1234 поставь свои переменные. Как минимум на одно нажатие меньше будет. Ты youtube-dl мучаешь? Она же качество по youtube-dl -Ф сортирует от меньшего к большему. В таком случае твоя задача выглядит элементарной.



Код:

Код: Выделить всё

@echo off
>nul chcp 65001
setlocal enableextensions enabledelayedexpansion
:Repeat
echo ╔═══════════ Меню ═══════════╗
echo ║ 1. Создать папки           ║
echo ║ 2. Переместить заготовки   ║
echo ║ 3. Забрать файлы по маске  ║
echo ║ 4. Выход из меню           ║
echo ╟────────────────────────────╢
echo ║ Выберите один из вариантов ║
echo ╚════════════════════════════╝
echo.
choice.exe /c 1234
if %errorlevel% equ 4 exit /b
if %errorlevel% equ 255 exit /b
call :Sub%errorlevel%
goto :Repeat
endlocal
exit /b 0
:Sub1
	call d:\папка\111.bat
	exit /b
:Sub2
	call d:\папка\222.bat
	exit /b
:Sub3
	call d:\папка\333.bat
	exit /b
Аватара пользователя
x0r

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение x0r »

да нет.. я именно wget и grep мучаю Изображение Качать с трубы есть и много чем.

Хочу просто отсортировать для удобства. Просто странно, искал и не нашел. Неужели за столько лет никому не надо было сортировать по числам в bat\cmd ? ну вот хотяб имена папок:

101

235

560

1258

4580

... онож отсортируе их по первой цифре, но кому это нужно?! Изображение
Аватара пользователя
Казбек

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение Казбек »

Цитата x0r:



101

235

560

1258

4580

... онож отсортируе их по первой цифре, но кому это нужно?!
CMD/BAT - [решено] Сортировать числа (не цифры)






Код:

Код: Выделить всё

@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1-4 delims=." %%a in (input.txt) do (
    set /A "a=10000+%%a"
    set "line[!a:~1!]=%%a"
)
for /F "tokens=2 delims==" %%a in ('set line[') do echo %%a
pause




Результат

[spoiler]Изображение[/spoiler]
Аватара пользователя
x0r

Re: CMD/BAT - [решено] Сортировать числа (не цифры)

Сообщение x0r »

Ну понял, в общем..

Благодарю Казбек, твой способ отлично сортирует цифры, оч. пригодиццо. Такоеб я сам непридумал этточно.



choice не мой случай. наверно можно, но так тоже ниччё, как есть Изображение



В общем, когда сталкиваешься с консольют в виндовс, тебя всегда со всех сторон поджидают ёжики, кактусы и иголки... колоться и плакать будешь. Т.к. я все одно юзаю wget
и grep , то какого черта я пытаюсь пользовать sort из винды - можнож оттудаж , откуда и grep - из UnixUtils!



Взял её и все получилось как и должно, просто и удобно. Сортировать можно как угодно, вариантов - все какие могут понадобиццо.

В итоге вот это



Код:

Код: Выделить всё

sort -V -r tmp > tmps

решило всё, все отсортировано по старшинству и выводится в запросе как хотелось



с сортировкой значений от бОльшего к меньшему

[spoiler]Код:
[/spoiler]

Код: Выделить всё

:CIKL
SetLocal EnableDelayedExpansion
"%PROGRAMFILES%\UnixUtils\bin\sort.exe" -V -r tmp > tmps 

set /a zero=0
for /f "UseBackQ Delims=" %%A IN ("tmps") do (
  set /a zero+=1
  if !zero!==1 set a=%%A
  if !zero!==2 set b=%%A
  if !zero!==3 set c=%%A
  if !zero!==4 set d=%%A
  if !zero!==5 set e=%%A
)
echo ^      ¤¤¤                                                              ¤¤¤
echo ^          -------------------------------------------------------------------------
echo Что будем качать: (1)-%a%  (2)-%b%  (3)-%c%  (4)-%d%  (5)-%e%
echo ^             Q - Выход
echo ^          -------------------------------------------------------------------------
echo ^      ¤¤¤                                                              ¤¤¤
set /p answ=_:
if /i %answ% EQU q goto :EOF
if /i %answ% EQU 1 set m3u=%a%
if /i %answ% EQU 2 set m3u=%b%
if /i %answ% EQU 3 set m3u=%c%
if /i %answ% EQU 4 set m3u=%d%
if /i %answ% EQU 5 set m3u=%e%









hls-1080p.m3u8

hls-720p.m3u8

hls-480p.m3u8

hls-360p.m3u8

hls-250p.m3u8[/i]



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



Вроде всё. Если ниччё не испортится\не придумается, завтра закрою как решенную.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»