Board logo

标题: [文本处理] 批处理命令dir获取文件名后,怎么按递增进行排序? [打印本页]

作者: think    时间: 2014-5-21 15:15     标题: 批处理命令dir获取文件名后,怎么按递增进行排序?

  1. dir /b >test.txt
复制代码
这样写的,保存目录的文件名后,是正常排序的,但今天发现就乱了!
硬盘目录下文件是这样排序的:
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

  1. @echo off
  2. %1(for /f "delims=" %%a in ('"%~0" :^|sort') do echo,%%~nxa)>test.txt
  3. %1pause & exit/b
  4. for /f "delims=" %%a in ('dir /ad /b') do (
  5.     set "s=%%a"
  6.     setlocal enabledelayedexpansion
  7.     set "n=00000000000!s:*_=!"
  8.     echo,!n:~-11!/!s!
  9.     endlocal
  10. )
复制代码

作者: CrLf    时间: 2014-5-22 00:18

gnu 的 sort 最方便:
  1. 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


    顶楼给的数据为啥不包含小数点?
  1. @set @n=0;/* & echo off
  2. dir /ad /b | cscript -nologo -e:jscript "%~0"
  3. pause & exit/b & rem */
  4. ar = [];
  5. while (!WScript.StdIn.AtEndOfStream) {
  6.     name = WScript.StdIn.ReadLine();
  7.     s = name.replace(/\d+/g,
  8.         function(s0){return ('0000000000'+s0).substr(s0.length)}
  9.     )
  10.     ar.push(s + '\\' + name);
  11. }
  12. ar.sort();
  13. 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://bbs.bathome.net/) Powered by Discuz! 7.2