Показать полную графическую версию : [решено] Сортировать числа (не цифры)
Привет.
Как можно отсортировать нормально, по числу, а не по символу ? Вот такой файл, нопример:
hls-1080p.m3u8
hls-480p.m3u8
hls-720p.m3u8
hls-360p.m3u8
hls-250p.m3u8
я его потом дальше обрабатываю, подставляю недостающую часть адреса, др. параметры и тяну wget-ом. Так вот, надо отсортировать числа по величине, дабы удобнее было ввести значение кот-е хочешь скачать. Чтоб первым шло самое большое, мешьнее... меньшее и т.д. Там могет быть и hls-2048p.m3u8
: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
11-02-2018, 18:47
А варианты разрешений у тебя появляются динамически? А то проще всего взять choice.
И жестко привязать. Даже если динамически на мой взгляд здесь просится choice.
нет, не динамически. это просто файл со списком доступных "качеств". Для каждой новой закачки он будет отличаться только колличеством доступных "качеств". Может быть больше, может быть меньше... но такой же формат, отличия в колличестве строк.
А как это будет с choice ?
зы. оно и так выводит и работает у мну нормально, все скачивается. Просто нет сортировки, чисто визуально... высшее качество в выборе может оказаться под номером "3" например. А яб хотел чтоб оно было всегда первым, а для этого яб хотел отсортировать этот файл по величине чисел. чойс же не сортирует никак вродеб.
Patroklos
11-02-2018, 20:11
Вот скрипт от Иски. Он его кому то тут давал. Адаптируй его под себя. Там где 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
да нет.. я именно wget и grep мучаю :) Качать с трубы есть и много чем.
Хочу просто отсортировать для удобства. Просто странно, искал и не нашел. Неужели за столько лет никому не надо было сортировать по числам в bat\cmd ? ну вот хотяб имена папок:
101
235
560
1258
4580
... онож отсортируе их по первой цифре, но кому это нужно?! :unsure:
101
235
560
1258
4580
... онож отсортируе их по первой цифре, но кому это нужно?! »
@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
https://i.imgur.com/61Sxqm9.png
Ну понял, в общем..
Благодарю Казбек, твой способ отлично сортирует цифры, оч. пригодиццо. Такоеб я сам непридумал :up этточно.
choice не мой случай. наверно можно, но так тоже ниччё, как есть ;)
В общем, когда сталкиваешься с консольют в виндовс, тебя всегда со всех сторон поджидают ёжики, кактусы и иголки... колоться и плакать будешь. Т.к. я все одно юзаю wget и grep , то какого черта я пытаюсь пользовать sort из винды - можнож оттудаж , откуда и grep - из UnixUtils!
Взял её и все получилось как и должно, просто и удобно. Сортировать можно как угодно, вариантов - все какие могут понадобиццо.
В итоге вот это
sort -V -r tmp > tmps
решило всё, все отсортировано по старшинству и выводится в запросе как хотелось
: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
+ теперь запрос этот я вообще могу убрать, а сразу качать первое значение т.к. оно и будет самым лучшим кач-вом. Этот запрос и нужен был только изза того, что я не мог выбрать автоматом лучшее, приходилось выбирать вручную.
Вроде всё. Если ниччё не испортится\не придумается, завтра закрою как решенную.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.