Board logo

标题: [文件操作] 批处理如何将子文件夹的文件统一按特殊序列命名? [打印本页]

作者: myacg    时间: 2020-7-20 18:02     标题: 批处理如何将子文件夹的文件统一按特殊序列命名?

比如父文件夹名字“春天照片”下面有“照片01”照片02”照片03”照片04”照片04”五个子文件夹,并有照片若干。
要求:
1.将父文件夹包括子文件夹内的所有图片按照父文件夹名+数字同一命名,比如“照片01”里面如果有五张图片就是”春天照片_001"----”春天照片_005",而“照片02”的图片则从”春天照片_006"开始递增,以此类推。

2.如果父文件夹内有图片则优先重命名父内文件夹的图片,子文件夹再之后数字递增。

3.完成命名后将所有子文件夹的文件移动到父文件夹并删除子文件夹。
作者: Batcher    时间: 2020-7-20 19:34

回复 1# myacg


推荐试试这个代码(虽然跟你的要求不是100%符合):
http://bbs.bathome.net/thread-69-1-1.html
作者: myacg    时间: 2020-7-21 08:44

回复 2# Batcher

管理员好,我看论坛帖子自己写了一个,可以达到我的要求,请帮我看看有什么可以改进的。谢谢!
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set /a n=1000
  5. for /f %%i in ("%cd%_") do (
  6.   for /f "delims=" %%b in ('dir /b /ad') do (
  7.   set /a n+=1
  8.   ren "%%~b" "%%~ni!n:~-2!"
  9.   )
  10. )
  11. rem 先处理文件夹
  12. set n=1000
  13. for /f "delims=" %%a in ('dir /b /ad') do (
  14.   pushd %%a
  15.   for %%b in (*.*) do (
  16.     set /a n+=1
  17.     ren "%%~b" "%%~a-!n:~-3!%%~xb"
  18.   )
  19.   popd
  20. )
  21. for /r /d %%a in (*) do move /y "%%a\*"&rd /s /q "%%a"
复制代码

作者: Batcher    时间: 2020-7-21 09:13

回复 3# myacg


1. 第5行到第10行是为了实现顶楼描述的哪个功能点?
2. 顶楼描述的如果父文件夹内有图片则优先重命名父内文件夹的图片是通过哪几行代码实现的?
作者: myacg    时间: 2020-7-21 09:18

本帖最后由 myacg 于 2020-7-21 10:08 编辑

额,那几行是父目录命名。。。优先父目录图片这个功能我不会写。。。

如果写的不对麻烦帮改进一下。
作者: smss    时间: 2020-7-21 12:00

  1. @echo off&setlocal enabledelayedexpansion&set n=1000
  2. for /f "delims=" %%i in ('dir /b/s *.jpg') do (set "p=%~dp0"&cd/d "!p!.."&set /a n+=1&call set "pf=%%p:!cd!\=%%"
  3. echo ren "%%i" "!pf:\=_!!n:~-3!%%~xi")
  4. echo 重命名完毕&pause
复制代码

作者: Batcher    时间: 2020-7-21 14:44

回复 5# myacg
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "n=1000"
  5. REM 如果父文件夹内有图片则优先重命名父内文件夹的图片
  6. for %%i in ("%~f0\..") do (
  7.     set prefix=%%~nxi
  8. )
  9. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  10.     set /a n+=1
  11.     ren "%%i" "%prefix%!n:~-3!%%~xi"
  12. )
  13. REM 子文件夹再之后数字递增
  14. for /f "delims=" %%a in ('dir /b /ad') do (
  15.     pushd "%%a"
  16.     for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  17.         set /a n+=1
  18.         ren "%%i" "%prefix%!n:~-3!%%~xi"
  19.         move "%prefix%!n:~-3!%%~xi" ..
  20.     )
  21.     popd
  22.     rd /q "%%a"
  23. )
复制代码

作者: myacg    时间: 2020-7-21 15:05

回复 7# Batcher

对比一下,我写的那是什么玩意
作者: Batcher    时间: 2020-7-21 15:45

回复 8# myacg


    初学乍练已经算是非常好了




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