标题: [文件操作] 批处理如何将文件按文件名中的数字大小排序 [打印本页]
作者: sssony 时间: 2015-8-14 17:24 标题: 批处理如何将文件按文件名中的数字大小排序
本帖最后由 pcl_test 于 2017-4-1 16:40 编辑
想用批处理给一批文件按顺序重命名,发现在DOS下。文件的排序方式与窗口下不一样。
例如:文件名
01、02、03、04、05、06、07、08、09、10、11、以此类推。但在DOS下的顺序却是:01、10、02、03、04、。这种排序方式导致文件名修改顺序是错的。有没有解决的办法???
原始的文件名是前后是汉字。中间(1),(2)类似是这样的。
或者有没有人帮忙写一段批处理按()中的数字。按三位数补齐。不改变原有其它文件名的情况下。把括号内的数字补齐成三位。变成(001)、(002)、(010)。这种样式?
作者: bailong360 时间: 2015-8-14 17:42
01、10、02、03、04 <- 这个排序方式真没遇到
1、10、2、3、4 <- 这个倒是很常见复制代码
GNU sort方案- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-3 delims=()" %%i in ('dir /a-d /b') do (
- set "Num=00%%j"
- ren "%%i%%j%%k" "%%i!Num:~-3!%%k"
- )
复制代码
作者: terse 时间: 2015-8-14 18:24
本帖最后由 terse 于 2015-8-14 22:45 编辑
是纯DOS吗 顺便修正一个变量名- @if(0)==(0) echo off
- for /f "delims=" %%i in ('dir /a-d/b ^|findstr /ixv "%~nx0" ^|cscript.exe -NoLogo -E:JScript %0') do (
- echo Ren %%i 2>nul
- )
- pause & exit
- @end
- var s = "000"
- while (!WSH.StdIn.AtEndOfStream){
- var str = WScript.StdIn.ReadLine();
- var newstr = str.replace
- (/(.+?\()(\d+)(\).+)/,
- function(a,b,c,d) {
- return('"' + a + '" '+ '"' + b + s.substring(0, 3 - c.length) + c + d + '"');
- }
- );
- if (newstr != str) WSH.Echo(newstr);
- }
复制代码
作者: CrLf 时间: 2015-8-14 18:30
可是二位大哥,我觉得楼主说的好像是纯 dos
作者: sssony 时间: 2015-8-14 22:43
回复 2# bailong360
先谢谢。因为在家里。没办法试验。明天试一下
作者: sssony 时间: 2015-8-14 22:44
回复 4# CrLf
不算是纯DOS。只是说在DOS的环境下。是这样的排序方式
作者: sssony 时间: 2015-8-15 08:39
回复 2# bailong360
其实是我说错了。。。是1、10、2、3、。
作者: sssony 时间: 2015-8-15 08:44
回复 2# bailong360
这段在好像不行。我试了一下。是在我文件的后缀名后增加了两个00
作者: sssony 时间: 2015-8-15 08:53
回复 3# terse
好像不行。。窗口显示文件名是改过来了。但实际文件没有操作个性
作者: bailong360 时间: 2015-8-15 10:03
回复 4# CrLf
将他们口中的DOS当作CMD一般情况下都是正确的
回复 9# sssony
全然没听懂....举几个文件名例子
作者: terse 时间: 2015-8-15 11:42
回复 9# sssony
去掉第三行的 echo
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |