Board logo

标题: [文件操作] 批处理如何重新命名最底层文件夹下的文件? [打印本页]

作者: SandraRusso    时间: 2015-2-14 17:33     标题: 批处理如何重新命名最底层文件夹下的文件?

请教大家!D盘符下有W文件夹,W文件夹下有众多子文件夹,每个子文件夹下包含很多图片文件,如何批量将这些图片重新命名?
作者: pcl_test    时间: 2015-2-14 18:07

回复 1# SandraRusso

命名规则是什么?
作者: SandraRusso    时间: 2015-2-14 18:26

回复 2# pcl_test


    比如将数字.jpg格式的转化成数字-数字的格式!例如把某个文件夹下的3张图片 2.jpg→5-1.jpg 3.jpg→5-2.jpg 4.jpg→5-3.jpg,前提每个文件夹下的图片文件名和数量都不太一样,最后想要统一成*—*的格式就好
作者: pcl_test    时间: 2015-2-14 18:47

回复 3# SandraRusso

数字.jpg格式的转化成数字1-数字2.jpg的格式很容易,但是这数字怎么决定呢,这个规则没有说清楚,比如可以先获取某个子文件夹里的数字1-数字2.jpg格式的图片数字1为最大值的是多少,然后把数字.jpg格式的按数字1最大值+1-数字2.jpg的格式命名
作者: SandraRusso    时间: 2015-2-14 19:04

回复 4# pcl_test


    每个子文件夹下的图片转化后的格式数字1-数字2,数字1为固定数字比如5,数字2为1、2、3……以此类推,转化前的照片.jpg前面的数字最大值不超过10,有的是也是数字1-数字2的格式,但是想统一所有的数字开头比如5-1、5-2
以此类推!
作者: SandraRusso    时间: 2015-2-14 20:40

回复 4# pcl_test


    高手,看到命名规则了没?大致想实现这样的效果,你帮我看看呗!
作者: pcl_test    时间: 2015-2-14 21:51

本帖最后由 pcl_test 于 2015-2-14 22:27 编辑

回复 5# SandraRusso

一、可重命名D:\W里的一级子文件夹里的图片
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "filesdir=D:\W\"
  4. for /f "delims=" %%i in ('dir /ad /b "%filesdir%"') do (
  5. pushd "%filesdir%%%i"
  6. set n=1
  7. for /f "delims=" %%a in ('dir /b *jpg 2^>nul ^|findstr /v ".-"') do (
  8. ren "%%a" "5-!n!.jpg"
  9. set /a n+=1
  10. )
  11. popd
  12. )
  13. pause
复制代码
二、可重命名D:\W里的N级子文件夹里的图片
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "filesdir=D:\W\"
  4. cd /d "%filesdir%"
  5. for /f "delims=" %%a in ('dir /a-d /s /b *jpg ^|findstr /v ".-"') do (
  6. >>"temp.txt" echo,%%~dpa
  7. )
  8. for /f "delims=" %%b in ('type "temp.txt"') do (
  9. if not defined %%b set %%b=Def & >>$ echo,%%b
  10. )
  11. move $ "temp.txt"
  12. for /f "delims=" %%c in ('type "temp.txt"') do (
  13. set n=1
  14. pushd "%%c"
  15. for /f "delims=" %%i in ('dir /b *jpg ^|findstr /v ".-"') do (
  16. ren "%%i" "5-!n!.jpg"
  17. set /a n+=1
  18. )
  19. popd
  20. )
  21. del temp.txt /f /q
  22. pause
复制代码

作者: SandraRusso    时间: 2015-2-18 12:16

回复 7# pcl_test


    试了一下,只能转化命名为*.jpg的图片,并不能命名*-*.jpg格式的图片,因为转化前的照片有的是也是数字1-数字2的格式(*-*.jpg),比如1-1,1-2,3-2……想统一所有的数字开头比如5-1、5-2
以此类推!
作者: pcl_test    时间: 2015-2-18 12:22

回复 8# SandraRusso
把筛选条件^|findstr /v ".-"去掉即可
作者: SandraRusso    时间: 2015-2-18 14:06

回复 9# pcl_test


    好的!非常感谢~前几天我给您截图的那个帖子您有空再帮我看看呗!您一直也没回复,实在不知道是什么原因了呢?
作者: SandraRusso    时间: 2015-2-18 15:02

回复 9# pcl_test


    又出现了点小问题,如果原来图片中已经存在5-3.jpg的命名,在统一命名的时候后这张图片的名字也会发生变化,如何保留像这样要求的5-*(5可以根据需要随意变动)格式的本身的命名呢,只改动其他不标准的名字!
作者: pcl_test    时间: 2015-2-18 17:31

回复 11# SandraRusso
不要刷题
在命名语句加个判断即可
  1. for /f "delims=" %%a in ('dir /b *jpg 2^>nul') do (
  2. if exist "5-!n!.jpg" (
  3. set /a n+=1
  4. ) else (
  5. ren "%%a" "5-!n!.jpg"
  6. set /a n+=1
  7. )
  8. )
复制代码





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