排序一般要用到sort,不过,sort是逐位做比较,比如sort认为12大于100,因为第二位上,2大于0。要避免这样的情况,可以考虑只对同一长度的数字串做比较。例如以下代码就可以成功解决逐位比较和超大数带来的问题,只不过效率比较低下:- @echo off
- setlocal enabledelayedexpansion
-
- :: 统计数字串的最大长度
- set max=0
- for /f %%i in (test.txt) do (
- set length=0
- call :CheckLength %%i
- if !length! geq !max! set max=!length!
- )
-
- :: 在文本最后插入空行,消除findstr整行匹配时忽略最后一行带来的影响
- echo.>>test.txt
-
- :: 对同一长度的数字串做比较
- for /l %%i in (1,1,%max%) do (
- set str=!str![0-9]
- for /f %%j in ('findstr /be "!str!" test.txt^|sort') do echo %%j
- )
- pause
- exit
-
- :CheckLength
- set str=%1
- :loop
- set /a length+=1
- set str=!str:~1!
- if defined str goto loop
- goto :eof
复制代码
|