Board logo

标题: [文件操作] [已解决]批处理如何用文件的修改时间排序后重命名文件? [打印本页]

作者: xinjinjie    时间: 2017-5-28 19:29     标题: [已解决]批处理如何用文件的修改时间排序后重命名文件?

已自行搜索帖子,一般都是用文件的修改时间来直接给文件重命名或者将文件的修改时间添加到新文件名里去这种,都不太符合我这个需求。

需求条件:所有子文件夹中的文件,用文件的修改时间排序,从早到晚,然后按这个顺序,重命名为01或者001开始的新文件名。比如:01.jpg或者001.jpg。

手动操作的规律:打开某个文件夹,用文件的修改时间排序,从早到晚,然后重命名。这里如果用WINDOWS自己的重命名,出来的结果是类似“01(1),01(10),01(21)"这种,不符合需求,用批量改名工具软件,就是反复操作打开某个子文件夹,用文件的修改时间排序,从早到晚,然后重命名。

因为有规律,所以应该能用BAT来实现所有子文件夹中的文件的重命名,但是不知道该怎么用BAT代码来实现,求各位大大指点,谢谢。

借用ShowCode大大之前指点的代码,能实现到遍历所有子文件夹和指定后缀名,先贴出来,中文描述部分等待大神们指点。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.jpg') do (
  4. 按文件修改时间排序
  5. 按顺序重命名文件名
  6. )
复制代码
有效代码在3楼
作者: xinjinjie    时间: 2017-5-28 20:32

又设想了一下,似乎可以将文件先改名为修改时间的文件名,然后再处理。但是这样似乎意义不大,后续真正改名还是需要每个文件夹单独处理
作者: ivor    时间: 2017-5-28 20:46

本帖最后由 pcl_test 于 2017-5-28 22:05 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /R %%a in (\) do (
  3.     cd /d "%%a"
  4.     set num=1001
  5.     for /f "delims=" %%b in ('dir /b /a-D /oD *.jpg 2^>nul') do (
  6.         echo;"%%a%%b" 重命名为===》"!num:~-3!%%~xb"
  7.         ren "%%a%%b" "!num:~-3!%%~xb"
  8.         set/anum+=1
  9.     )
  10. )
  11. pause
复制代码

作者: xinjinjie    时间: 2017-5-28 21:23

本帖最后由 xinjinjie 于 2017-5-28 21:28 编辑

回复 3# ivor


    感谢大大的指点,不过实测这个代码有BUG,改名确实是按文件修改时间这个条件来处理的,但是改名内容部分有问题。

目前测试结果,最早修改时间的文件改名为了01.jpg,第二个时间的结果是001.jpg,第三个时间的结果是0001.jpg,以此类推……

实际需要的结果文件名是,01.jpg或者001.jpg开始,001.jpg,002.jpg……
作者: xinjinjie    时间: 2017-5-28 21:31

回复 3# ivor


   按代码推测,应该是“set num=0!num!”这句的缘故,实际需要的是数字反复累加,这句似乎是不断在“01”这个字符串前面加“0”这个字符串。但是不知道该怎么改成数字的累加语句……
作者: xinjinjie    时间: 2017-5-30 15:01

回复 3# ivor


    感谢大大的反复指点,目前这个代码有效,并且运行效率感觉也很不错,非常感谢。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2