标题: [其他] [已解决]批处理中使用dir命令列出的以纯数字命名的文件如何按数字大小排序 [打印本页]
作者: fish 时间: 2010-8-28 19:32 标题: [已解决]批处理中使用dir命令列出的以纯数字命名的文件如何按数字大小排序
本帖最后由 pcl_test 于 2016-11-3 15:13 编辑
批处理中dir命令结果如何能按数字大小排序
注意不是按文件名排序。
本题目的文件名是1~200的数字,请将dir的显示结果按照数字排序。
[ 本帖最后由 fish 于 2010-8-28 22:08 编辑 ]
作者: TX_kakashi 时间: 2010-8-28 20:21
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 颠倒顺序的前缀
复制代码
[ 本帖最后由 TX_kakashi 于 2010-8-28 20:31 编辑 ]
作者: fish 时间: 2010-8-28 20:48 标题: 回复 2楼 的帖子
前辈,这样还是不行啊,101会排在11前面的。
作者: TX_kakashi 时间: 2010-8-28 21:13
似乎sort命令也有同样的问题,具体你要处理什么问题呢?是不是单纯列出个文件清单,然后按照1-200这样排序?
[ 本帖最后由 TX_kakashi 于 2010-8-28 21:21 编辑 ]
作者: fish 时间: 2010-8-28 21:30 标题: 回复 4楼 的帖子
我有1~200个字幕文件,名称分别是1.lrc~200.lrc,前辈应该知道字幕要和音频文件名一致才可以播放吧,所以我想将这些字幕文件改成音频文件的名,但是我的音频文件又是有顺序的,不能乱改,比如我的音频文件名是从"音频lesson (1)"到"音频lesson (200)",请问我应该怎么办呢?非常着急啊,有劳前辈了。
作者: TX_kakashi 时间: 2010-8-28 21:38
就是把 "1.lrc" 文件名改名成 "音频lesson(1).lrc" ,然后依次类推?
作者: fish 时间: 2010-8-28 21:41 标题: 回复 6楼 的帖子
嗯,是这样,只是中间有空格,嗯我试试字符截取吧,多谢前辈提供思路了。
作者: TX_kakashi 时间: 2010-8-28 21:48
那就好办多了。- @echo off
- setlocal
- :bof
- cls
- set /p wPath=[拖放文件夹到此]
- if not exist %wPath%\ goto bof
- pushd %wPath%
- for /f "delims=" %%I in ('dir/b/s/a-d *.lrc') do ren "%%I" "音频文件lesson (%%~nI).lrc"echo Done.
- pause
复制代码
[ 本帖最后由 TX_kakashi 于 2010-8-28 21:53 编辑 ]
作者: fish 时间: 2010-8-28 21:58 标题: 回复 8楼 的帖子
前辈啊,这样()里就不是数字了,而是数字.lrc
作者: fish 时间: 2010-8-28 22:07 标题: 回复 8楼 的帖子
这个我自己弄好了,多谢卡卡西前辈指教了,真的非常感谢!
问题解决了。
作者: TX_kakashi 时间: 2010-8-28 22:14
本帖最后由 pcl_test 于 2016-11-27 16:45 编辑
1、补位- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d/b *.lrc') do (
- set "fn=000000000000%%~na"
- set "#!fn:~-10!=%%a"
- )
- for /f "tokens=1* delims==" %%a in ('set #') do echo;%%b
- pause
复制代码
2、第三方sort http://www.bathome.net/s/tool/index.html?key=sort复制代码
3、结合其他脚本语言- powershell -c "dir *.lrc|?{$_.BaseName -match '^\d+$'}|sort {[int]$_.BaseName}|%%{$_.Name}"
- pause
复制代码
- 1>1/* :
- @echo off
- dir /a-d/b *.lrc|cscript -nologo -e:jscript "%~f0"
- pause&exit
- */
-
- WSH.Echo(WSH.StdIn.ReadAll().split(/[\r\n]+/).sort(function(a,b){
- return Number(a.replace(/(.+\\\D*)?(\d+)(\.[^\.\\]+$)?/,'$2'))-Number(b.replace(/(.+\\\D*)?(\d+)(\.[^\.\\]+$)?/,'$2'))
- }).join('\r\n'))
复制代码
作者: fish 时间: 2010-8-28 22:31 标题: 回复 11楼 的帖子
前辈您太客气了,帮了我很大的忙呢,思路是最重要的了,好的算法等于成功的一半呢,再次感谢卡卡西前辈的鼎力相助喽!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |