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

[文件操作] 批处理如何将文件按文件名中的数字大小排序

[复制链接]
发表于 2015-8-14 17:24:09 | 显示全部楼层 |阅读模式
本帖最后由 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)。这种样式?
发表于 2015-8-14 17:42:17 | 显示全部楼层
01、10、02、03、04 <- 这个排序方式真没遇到
1、10、2、3、4 <- 这个倒是很常见
  1. dir /a-d /b|sort -n
复制代码
GNU sort方案
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-3 delims=()" %%i in ('dir /a-d /b') do (
  4.     set "Num=00%%j"
  5.     ren "%%i%%j%%k" "%%i!Num:~-3!%%k"
  6. )
复制代码
发表于 2015-8-14 18:24:36 | 显示全部楼层
本帖最后由 terse 于 2015-8-14 22:45 编辑

是纯DOS吗 顺便修正一个变量名
  1. @if(0)==(0) echo off
  2. for /f "delims=" %%i in ('dir /a-d/b ^|findstr /ixv "%~nx0" ^|cscript.exe -NoLogo -E:JScript %0') do (
  3.     echo Ren %%i 2>nul
  4. )
  5. pause & exit
  6. @end
  7. var s = "000"
  8. while (!WSH.StdIn.AtEndOfStream){
  9.     var str = WScript.StdIn.ReadLine();
  10.     var newstr = str.replace
  11.       (/(.+?\()(\d+)(\).+)/,
  12.          function(a,b,c,d) {
  13.             return('"' + a + '" '+ '"' + b + s.substring(0, 3 - c.length) + c  + d + '"');
  14.          }
  15.        );
  16.        if (newstr != str) WSH.Echo(newstr);
  17. }
复制代码
发表于 2015-8-14 18:30:36 | 显示全部楼层
可是二位大哥,我觉得楼主说的好像是纯 dos
 楼主| 发表于 2015-8-14 22:43:23 | 显示全部楼层
回复 2# bailong360


    先谢谢。因为在家里。没办法试验。明天试一下
 楼主| 发表于 2015-8-14 22:44:38 | 显示全部楼层
回复 4# CrLf


    不算是纯DOS。只是说在DOS的环境下。是这样的排序方式
 楼主| 发表于 2015-8-15 08:39:42 | 显示全部楼层
回复 2# bailong360


    其实是我说错了。。。是1、10、2、3、。
 楼主| 发表于 2015-8-15 08:44:19 | 显示全部楼层
回复 2# bailong360


    这段在好像不行。我试了一下。是在我文件的后缀名后增加了两个00
 楼主| 发表于 2015-8-15 08:53:39 | 显示全部楼层
回复 3# terse


    好像不行。。窗口显示文件名是改过来了。但实际文件没有操作个性
发表于 2015-8-15 10:03:30 | 显示全部楼层
回复 4# CrLf
将他们口中的DOS当作CMD一般情况下都是正确的

回复 9# sssony
全然没听懂....举几个文件名例子
发表于 2015-8-15 11:42:22 | 显示全部楼层
回复 9# sssony
去掉第三行的 echo
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 12:54 , Processed in 0.020950 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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