中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]用sort能否实现文件数值按大小排序
楼 主 [已解决]用sort能否实现文件数值按大小排序 发表于 2007-05-17 20:12 ·  中国 福建 福州 连江县 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
UID 74328
性别 男
状态 离线
RT
假设文件test.txt中为纯数字的数据,有如下数字
25
1
9
385
87
195876
如果用sort test.txt命令排序只能得到如下结果
1
195876
25
385
87
9
也就是说sort进行排序时是先按首位字符排序,那么如果按照平时习惯是按数值大小排序应该如何处理,也就是结果应该如下
1
9
25
87
385
195876


[ Last edited by suntb on 2007-5-18 at 10:05 AM ]
2 发表于 2007-05-17 20:48 ·  中国 福建 福州 连江县 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
UID 74328
性别 男
状态 离线
没有人帮忙,查看论坛中的帖子,好象用sort无法实现

[ Last edited by suntb on 2007-5-18 at 11:11 AM ]
3 发表于 2007-05-22 21:02 ·  中国 青海 西宁 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我也在想这个问题,也没有答案
4 发表于 2007-05-23 00:59 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
多搜索一下,记得以前有过类似的讨论的。
5 发表于 2007-05-23 01:19 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
UID 68504
性别 男
来自 湖南==》广东
状态 离线
试试以下代码:

::code by youxi01@cn-dos.net
::使用格式:命令行中,输入:
::
@echo off
setlocal enabledelayedexpansion

if "%2"=="" (
for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
) else (
for /f %%i in (%1) do (
call :CheckNum %%i Res
echo !Res!#%%i)
goto :eof)

pause>nul

:CheckNum num Res
set/a Res=0
for /l %%i in (0 1 1000) do (
set "var=%~1"
set tmp=!var:~%%i,1!
if "!tmp!"=="" goto :eof
set/a Res+=1)

使用格式:
示例,某名为 “test.txt” 文件中有数字如下:

25
1
9
385
87
195876

在CMD 下测试结果如下:

F:\>paixu.bat test.txt
1
9
25
87
385
195876


不过郁闷的是,在测试时,我将这个P处理文件名改成了sort.bat,然后问题就来了,害我重启了两次,后来终于明白.....
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +8 2008-03-22 05:51
6 请高手支一声 发表于 2008-05-03 11:13 ·  中国 北京 海淀区 联通
初级用户
积分 28
发帖 15
注册 2008-04-28 09:18
UID 117150
性别 男
状态 离线
::code by youxi01@cn-dos.net
::使用格式:命令行中,输入:
::
@echo off
setlocal enabledelayedexpansion

if "%2"=="" (
for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
) else (
for /f %%i in (%1) do (
call :CheckNum %%i Res
echo !Res!#%%i)
goto :eof)

pause>nul

:CheckNum num Res
set/a Res=0
for /l %%i in (0 1 1000) do (
set "var=%~1"
set tmp=!var:~%%i,1!
if "!tmp!"=="" goto :eof
set/a Res+=1


请问:
for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
)
其中为什么要加OK俩字母???????
7 发表于 2008-12-27 13:51 ·  中国 江苏 南京 电信
初级用户
★★
积分 62
发帖 62
注册 2007-07-14 14:39
UID 93962
性别 男
状态 离线
呵呵,如何把这个排序结果输入到一个新的文本文件里呢?请教一下呵
论坛跳转: