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

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

本帖最后由 pcl_test 于 2016-11-3 15:13 编辑

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

[ 本帖最后由 fish 于 2010-8-28 22:08 编辑 ]

/O          用分类顺序列出文件。
  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  颠倒顺序的前缀

  1. dir /o:E
复制代码

[ 本帖最后由 TX_kakashi 于 2010-8-28 20:31 编辑 ]

TOP

回复 2楼 的帖子

前辈,这样还是不行啊,101会排在11前面的。

TOP

似乎sort命令也有同样的问题,具体你要处理什么问题呢?是不是单纯列出个文件清单,然后按照1-200这样排序?

[ 本帖最后由 TX_kakashi 于 2010-8-28 21:21 编辑 ]

TOP

回复 4楼 的帖子

我有1~200个字幕文件,名称分别是1.lrc~200.lrc,前辈应该知道字幕要和音频文件名一致才可以播放吧,所以我想将这些字幕文件改成音频文件的名,但是我的音频文件又是有顺序的,不能乱改,比如我的音频文件名是从"音频lesson (1)"到"音频lesson (200)",请问我应该怎么办呢?非常着急啊,有劳前辈了。

TOP

就是把 "1.lrc" 文件名改名成 "音频lesson(1).lrc" ,然后依次类推?

TOP

回复 6楼 的帖子

嗯,是这样,只是中间有空格,嗯我试试字符截取吧,多谢前辈提供思路了。

TOP

那就好办多了。
  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 编辑 ]

TOP

回复 8楼 的帖子

前辈啊,这样()里就不是数字了,而是数字.lrc

TOP

回复 8楼 的帖子

这个我自己弄好了,多谢卡卡西前辈指教了,真的非常感谢!
问题解决了。

TOP

本帖最后由 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'))
复制代码

TOP

回复 11楼 的帖子

前辈您太客气了,帮了我很大的忙呢,思路是最重要的了,好的算法等于成功的一半呢,再次感谢卡卡西前辈的鼎力相助喽!

TOP

返回列表