中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 13:40
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 排序问题 查看 899 回复 6
楼 主 排序问题 发表于 2010-03-06 21:15 ·  中国 广东 阳江 阳东区 电信
新手上路
积分 16
发帖 14
注册 2006-06-23 05:58
20年会员
UID 57436
状态 离线
第352集$31762956
第351集$31409628
第349-350集$31038027
第348集$30275965
第347集$30275004

怎样改成以下的顺序:

第347集$30275004
第348集$30275965
第349-350集$31038027
第351集$31409628
第352集$31762956
2 发表于 2010-03-06 23:39 ·  中国 北京 丰台区 联通
初级用户
积分 33
发帖 32
注册 2006-02-21 23:08
20年会员
UID 50740
性别 男
状态 离线
let
ffile=
tfile={
第352集$31762956
第351集$31409628
第349-350集$31038027
第348集$30275965
第347集$30275004
}
ss.cmd
::start
@echo off
for /f "delims=第集" %%i in ('type tfile.txt 2^>nul') do echo %%i >> n.txt
for /f %%j in ('sort n.txt') do type tfile.txt | find /i "%%j" >> ffile.txt
::end

不是很严谨,有可能出现排序错误的情况,请酌情调整。
用系统build-in sort,功能不是很好,有兴趣可以用cmd实现一个排序脚本,
但效率不会太高,而且局限性很大。

[ Last edited by tachyon on 2010-3-7 at 00:00 ]
3 发表于 2010-03-06 23:50 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do set i=%%i&set "han_!i:~1,3!=!i!"
for /f "tokens=1,2 delims==" %%i in ('set ^| findstr /b /i "han_"') do echo %%j
pause
4 发表于 2010-03-07 00:10 ·  中国 北京 丰台区 联通
初级用户
积分 33
发帖 32
注册 2006-02-21 23:08
20年会员
UID 50740
性别 男
状态 离线
楼上,
环境变量能放多少? 一定是按升序排列的吗?
5 发表于 2010-03-07 00:35 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
GNU 的 sort.exe

sort -t$ +2n a.txt
6 发表于 2010-03-07 00:41 ·  中国 上海 杨浦区 电信
初级用户
积分 49
发帖 42
注册 2009-11-26 04:39
16年会员
UID 155365
性别 男
状态 离线
@echo off
for /f %%a in (a.txt) do set \%%a=d
for /f "delims==" %%a in ('set \') do echo %%~nxa
pause
7 发表于 2010-03-07 10:33 ·  中国 广东 阳江 江城区 电信
新手上路
积分 16
发帖 14
注册 2006-06-23 05:58
20年会员
UID 57436
状态 离线
Originally posted by 000000000000000 at 2010-3-7 00:41:
@echo off
for /f %%a in (a.txt) do set \%%a=d
for /f "delims==" %%a in ('set \') do echo %%~nxa
pause



谢谢六楼

不过如果是下面的排序就会错:
第200集$2526154
...
第2集$2533922
第1集$2529441
就会变成
第119集$451570
第11集$2529441
第120集$451617
第121集$451657

不太懂批处理,
只要能把最后一行排在第一行,最后第二行排在第二行
...
第一行排在最后一行就可以了
论坛跳转: