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

[文件操作] 批处理如何对多个子文件夹里的多个文件中最后修改日期时间最新的前五个文件重命名

本帖最后由 pcl_test 于 2016-9-1 10:40 编辑

批处理如何创建多个子文件夹下的按修改时间命名成指定名称?
我简单表述一下,一个子文件夹中有多张图片,只需要重名命修改时间为最后的五张,其它不需要修改,不知这个能否用命令实现?
DW5A1152.jpg 修改时间为 2016/9/1 00:55:57     改名为:1.jpg
DW5A1157.jpg 修改时间为 2016/9/1 00:55:54     改名为:2.jpg
DW5A1116.jpg 修改时间为 2016/9/1 00:55:52     改名为:3.jpg
DW5A1111.jpg 修改时间为 2016/9/1 00:55:48     改名为:4.jpg
DW5A1145.jpg 修改时间为 2016/9/1 00:55:40     改名为:15.jpg
DW5A1184.jpg 修改时间为 2016/9/1 00:55:35
DW5A1118.jpg 修改时间为 2016/8/31 15:45:52
DW5A1197.jpg 修改时间为 2016/8/31 15:40:18
DW5A1149.jpg 修改时间为 2016/8/31 15:38:20
1

评分人数

本帖最后由 DiamondbacK 于 2016-9-1 01:59 编辑
  1. set max=5
  2. set count=0
  3. for /f "delims=" %%I in ('dir *.jpg /b /o-d') do (
  4.   set /a count += 1
  5.   call rename "%%~I" %%count%%.jpg
  6.   set /a 1 / (max - count^) 2>nul || goto end
  7. )
  8. :end 奇葩的第五个文件名
  9. rename 5.jpg 15.jpg
复制代码

TOP

回复 2# DiamondbacK


    你好,在单个文件夹中操作可以,非常快捷,但可否运用在多级目录下的多个子文件夹中做相同操作呢?我改了增加一了/s,实现不了。

TOP

本帖最后由 DiamondbacK 于 2016-9-2 03:38 编辑
  1. @echo off
  2. call :rename
  3. :: 进入每一个子文件夹,调用之前的代码
  4. for /r /d %%I in (*) do (
  5.   cd "%%~I"
  6.   call :rename
  7. )
  8. exit /b
  9. :rename
  10. set max=5
  11. set count=0
  12. for /f "delims=" %%I in ('dir *.jpg /b /o-d') do (
  13.   set /a count += 1
  14.   call rename "%%~I" %%count%%.jpg
  15.   set /a 1 / (max - count^) 2>nul || goto renameEnd
  16. )
  17. :renameEnd 奇葩的第五个文件名
  18. rename 5.jpg 15.jpg
  19. goto :eof
复制代码

TOP

本帖最后由 WHY 于 2016-9-4 22:42 编辑
  1. PowerShell -c "dir -Include *.jpg -Recurse|sort LastWriteTime -Desc|group PSParentPath|%%{$n=0;$_.Group[0..4]|%%{ren $_ -NewName (''+ ++$n + '.jpg')}}"
复制代码

TOP

回复 4# DiamondbacK


非常感谢,可以实现,而且速度还非常快。

TOP

回复 5# WHY


    该命令很简化,但命名因为不是常规顺序的,通常是1,2,3,4,15,16,17,18,19,20这样命名,其中也是遇到另一个难题,就是修改时间图片张数不定,通常是5张,有时候会多或者少,但他们的修改时间都是非常接近的,不知能否有方法判别呢?

TOP

本帖最后由 WHY 于 2016-9-7 19:20 编辑

test.ps1
  1. function EnumerateFile($Path){
  2.     $d = ($Path + '\').SubString(0, 2);
  3.     $p = ($Path + '\').SubString(2) -replace '\\', '$&$&';
  4.     $n = 0;
  5.     $file = gwmi CIM_DataFile -Filter ("Drive='" + $d + "' and Path='" + $p + "' and Extension='jpg'");
  6.     $file | sort LastModified -Desc | select -First 5 | %{
  7.         if($n -eq 4){
  8.             $n += 11
  9.         }else{
  10.             $n += 1
  11.         }
  12.         $_.Rename($Path + '\' + $n + '.jpg')
  13.     } | Out-Null
  14.     dir -LiteralPath $Path -Include * | ?{$_ -is [IO.DirectoryInfo]} | %{EnumerateFile $_.FullName}
  15. }
  16. EnumerateFile 'D:\Test'
复制代码

TOP

回复 8# WHY


    运行了命令没有变化的,是不是我有哪些设置没做好呢?

TOP

返回列表