[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理命令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排
大神,帮助下新手吧

  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. )
复制代码

TOP

gnu 的 sort 最方便:
  1. dir /ad /b | sort -t_ -n -k2
复制代码

TOP

本帖最后由 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

TOP

回复 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
请按任意键继续. . .

TOP

返回列表