=========================== 数字排序,使用方法 ==========================
1、要调用本段函数,先将代码从:sort开始及以下所有内容拷贝到批处理中即可。
2、调用方法: call :sort str 0 0 -81 1583 1698 107 1 258 7 37 1583 6 -2 2 9 8 7 15
:sort 为标签名,也可以自己定义.
str 为call 的第一个参数,代表变量名,%str%就是这段函数运行后得到的结果.
3、注意事项: 变量名必须为call的第一个参数。参数中不能含有其它符号。
========================================================================
代码一、 | @echo off | | :: 将数字排序 原创作者:3742668 原帖出自 cn-dos联盟 | | :: 整理:小楼一夜听春雨: 2007-11-21 | | :: | | :: 整理后功能: | | :: 可以对cmd范围内所有整数字进行排序,即:可以处理 负数、0、正数。 | | :: 可以处理重复数字。 | | :: 特点: 递归调用,速度快, | | :: 缺点: | | :: 若作为 函数调用,在全局中都不能使用“_+27va8t_/\r#”作为变量名,否则出错。 | | :: 不能处理0开头的数。_+27va8t_/\r# 此代码特意用了这个生僻的名称为变量名,以避免重复。 | | ::代码: | | set number=1 1698 107 2 258 0 37 1583 6 9 8 7 15 3 1 0 1 -5 -20 -1583 -1583 | | echo 排序前: | | echo %number% | | call :sort str %number% | | echo. | | echo 排序后: | | echo %str% | | echo\&pause | | exit | | :sort | | setlocal enabledelayedexpansion | | set var=%2&set "th=" | | set var_=%*&set var_= !var_:%1=! | | for %%i in (!var_!) do if !var! leq %%i set var=%%i | | for %%i in (!var_!) do if !var! equ %%i set th=!th! %%i | | set _+27va8t_/\r#=!th:~1! !_+27va8t_/\r#! | | set var_= !var_: %var%= ! | | if not "!var_: =!"=="" ( | | endlocal&set _+27va8t_/\r#=%_+27va8t_/\r#% | | call :sort _+27va8t_/\r# %var_%) | | call set _+27va8t_/\r#=%%_+27va8t_/\r#%% | | endlocal&set %1=%_+27va8t_/\r#% | | goto :eofCOPY |
代码二、
@echo off
::将数字排序 作者:小楼一夜听春雨 2007-11-24
::特点: 利用sort排序。
:: 可以对0以上(包括0)的任何整数进行排序。(以下代码可以处理200位以内的整数)
:: 速度一般,处理的数字越多,速度越快,可以处理重复的数字
:: 利用8个随机数来确定变量名不被重复,以达到处理重复数字的目的。
::缺点:
:: 不能处理负数,对0开头的数,结果会虑掉首位的0
:: | @echo off | | echo 排序前: | | set sis=1 20 2 0 5 1 0 38 20 3 1 5 4 3 1 22 | | echo %sis% | | call :sort str %sis% | | echo\&echo 排序后: | | echo %str% | | pause&exit | | :sort | | setlocal enabledelayedexpansion | | set num=&set str= | | for /l %%i in (1 1 200) do set str=0!str! | | for %%a in (%*) do ( | | set var=!str!%%a&set var=!var:~-200! | | set _!var!_!random!!random!!random!!random!!random!!random!!random!!random!=a | | ) | | for /f "tokens=1 delims=_=" %%a in ('set _^|sort') do ( | | for /f "tokens=* delims=0" %%i in ("%%a") do ( | | if "%%i"=="" (set num=!num! 0) else set num=!num! %%i | | )) | | endlocal&set %1=%num% | | call set %1=%%%1:%1=%% | | goto :eofCOPY |
|