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

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

本帖最后由 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)。这种样式?

回复 9# sssony
去掉第三行的 echo

TOP

回复 4# CrLf
将他们口中的DOS当作CMD一般情况下都是正确的

回复 9# sssony
全然没听懂....举几个文件名例子

TOP

回复 3# terse


    好像不行。。窗口显示文件名是改过来了。但实际文件没有操作个性

TOP

回复 2# bailong360


    这段在好像不行。我试了一下。是在我文件的后缀名后增加了两个00

TOP

回复 2# bailong360


    其实是我说错了。。。是1、10、2、3、。

TOP

回复 4# CrLf


    不算是纯DOS。只是说在DOS的环境下。是这样的排序方式

TOP

回复 2# bailong360


    先谢谢。因为在家里。没办法试验。明天试一下

TOP

可是二位大哥,我觉得楼主说的好像是纯 dos

TOP

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

TOP

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. )
复制代码

TOP

返回列表