找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34837|回复: 11

[其他] [已解决]批处理中使用dir命令列出的以纯数字命名的文件如何按数字大小排序

[复制链接]
发表于 2010-8-28 19:32:42 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-3 15:13 编辑

批处理中dir命令结果如何能按数字大小排序
注意不是按文件名排序。
本题目的文件名是1~200的数字,请将dir的显示结果按照数字排序。

[ 本帖最后由 fish 于 2010-8-28 22:08 编辑 ]
发表于 2010-8-28 20:21:12 | 显示全部楼层
/O          用分类顺序列出文件。
  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  颠倒顺序的前缀

  1. dir /o:E
复制代码

[ 本帖最后由 TX_kakashi 于 2010-8-28 20:31 编辑 ]
 楼主| 发表于 2010-8-28 20:48:33 | 显示全部楼层

回复 2楼 的帖子

前辈,这样还是不行啊,101会排在11前面的。
发表于 2010-8-28 21:13:52 | 显示全部楼层
似乎sort命令也有同样的问题,具体你要处理什么问题呢?是不是单纯列出个文件清单,然后按照1-200这样排序?

[ 本帖最后由 TX_kakashi 于 2010-8-28 21:21 编辑 ]
 楼主| 发表于 2010-8-28 21:30:27 | 显示全部楼层

回复 4楼 的帖子

我有1~200个字幕文件,名称分别是1.lrc~200.lrc,前辈应该知道字幕要和音频文件名一致才可以播放吧,所以我想将这些字幕文件改成音频文件的名,但是我的音频文件又是有顺序的,不能乱改,比如我的音频文件名是从"音频lesson (1)"到"音频lesson (200)",请问我应该怎么办呢?非常着急啊,有劳前辈了。
发表于 2010-8-28 21:38:05 | 显示全部楼层
就是把 "1.lrc" 文件名改名成 "音频lesson(1).lrc" ,然后依次类推?
 楼主| 发表于 2010-8-28 21:41:39 | 显示全部楼层

回复 6楼 的帖子

嗯,是这样,只是中间有空格,嗯我试试字符截取吧,多谢前辈提供思路了。
发表于 2010-8-28 21:48:57 | 显示全部楼层
那就好办多了。
  1. @echo off
  2. setlocal
  3. :bof
  4. cls
  5. set /p wPath=[拖放文件夹到此]
  6. if not exist %wPath%\ goto bof
  7. pushd %wPath%
  8. for /f "delims=" %%I in ('dir/b/s/a-d *.lrc') do ren "%%I" "音频文件lesson (%%~nI).lrc"echo Done.
  9. pause
复制代码

[ 本帖最后由 TX_kakashi 于 2010-8-28 21:53 编辑 ]
 楼主| 发表于 2010-8-28 21:58:35 | 显示全部楼层

回复 8楼 的帖子

前辈啊,这样()里就不是数字了,而是数字.lrc
 楼主| 发表于 2010-8-28 22:07:48 | 显示全部楼层

回复 8楼 的帖子

这个我自己弄好了,多谢卡卡西前辈指教了,真的非常感谢!
问题解决了。
发表于 2010-8-28 22:14:41 | 显示全部楼层
本帖最后由 pcl_test 于 2016-11-27 16:45 编辑

1、补位
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d/b *.lrc') do (
  3.     set "fn=000000000000%%~na"
  4.     set "#!fn:~-10!=%%a"
  5. )
  6. for /f "tokens=1* delims==" %%a in ('set #') do echo;%%b
  7. pause
复制代码
2、第三方sort http://www.bathome.net/s/tool/index.html?key=sort
  1. dir /a-d/b *.lrc|sort -n
复制代码
3、结合其他脚本语言
  1. powershell -c "dir *.lrc|?{$_.BaseName -match '^\d+$'}|sort {[int]$_.BaseName}|%%{$_.Name}"
  2. pause
复制代码
  1. 1>1/* :
  2. @echo off
  3. dir /a-d/b *.lrc|cscript -nologo -e:jscript "%~f0"
  4. pause&exit
  5. */

  6. WSH.Echo(WSH.StdIn.ReadAll().split(/[\r\n]+/).sort(function(a,b){
  7.     return Number(a.replace(/(.+\\\D*)?(\d+)(\.[^\.\\]+$)?/,'$2'))-Number(b.replace(/(.+\\\D*)?(\d+)(\.[^\.\\]+$)?/,'$2'))
  8. }).join('\r\n'))
复制代码
 楼主| 发表于 2010-8-28 22:31:40 | 显示全部楼层

回复 11楼 的帖子

前辈您太客气了,帮了我很大的忙呢,思路是最重要的了,好的算法等于成功的一半呢,再次感谢卡卡西前辈的鼎力相助喽!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:52 , Processed in 0.020058 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表