标题: [文本处理] 批处理命令dir获取文件名后,怎么按递增进行排序? [打印本页]
作者: think 时间: 2014-5-21 15:15 标题: 批处理命令dir获取文件名后,怎么按递增进行排序?
复制代码
这样写的,保存目录的文件名后,是正常排序的,但今天发现就乱了!
硬盘目录下文件是这样排序的:
test1_1
test1_2
test1_3
test1_4
.......
test1_13
test1_14
但命令生成txt文件后,排序就是也是按升序排的,但成这种情况
test1_1
test1_13
test1_14
test1_2
test1_3
如何能让它变成按硬盘目录文件名数字递增排序,而不是先按1排再按2排
大神,帮助下新手吧
作者: apang 时间: 2014-5-21 19:41
- @echo off
- %1(for /f "delims=" %%a in ('"%~0" :^|sort') do echo,%%~nxa)>test.txt
- %1pause & exit/b
- for /f "delims=" %%a in ('dir /ad /b') do (
- set "s=%%a"
- setlocal enabledelayedexpansion
- set "n=00000000000!s:*_=!"
- echo,!n:~-11!/!s!
- endlocal
- )
复制代码
作者: CrLf 时间: 2014-5-22 00:18
gnu 的 sort 最方便:- dir /ad /b | sort -t_ -n -k2
复制代码
作者: think 时间: 2014-5-22 09:41
本帖最后由 think 于 2014-5-22 09:42 编辑
回复 2# apang
回复 3# CrLf
没看明白什么意思...
其实就是让txt文件里一行一行按这样排序
1_1.1
1_1.2
.....
1_1.10
1_1.11
1_1.12
1_2.1
1_2.3
1_3.1
而不是让它,按这样排序
1_1.1
1_1.10
1_1.11
1_1.12
1_1.2
1_1.3
.....
1_2.1
1_2.3
1_3.1
作者: apang 时间: 2014-5-22 16:16
回复 4# think
顶楼给的数据为啥不包含小数点?- @set @n=0;/* & echo off
- dir /ad /b | cscript -nologo -e:jscript "%~0"
- pause & exit/b & rem */
- ar = [];
- while (!WScript.StdIn.AtEndOfStream) {
- name = WScript.StdIn.ReadLine();
- s = name.replace(/\d+/g,
- function(s0){return ('0000000000'+s0).substr(s0.length)}
- )
- ar.push(s + '\\' + name);
- }
- ar.sort();
- WScript.Echo(ar.join('\r\n').replace(/.*\\/g, ''))
复制代码
D:\test>dir /ad /b
test10_1.1
test1_1.1
test1_1.10
test1_1.2
test1_10.1
test1_10.12
test1_10.2
test1_2.3
D:\test>test.bat
test1_1.1
test1_1.2
test1_1.10
test1_2.3
test1_10.1
test1_10.2
test1_10.12
test10_1.1
请按任意键继续. . .
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |