Board logo

标题: [文件操作] 【已解决】批处理对电影目录及所有子目录文件名进行批量改名的求助 [打印本页]

作者: thp2008    时间: 2023-5-21 12:07     标题: 【已解决】批处理对电影目录及所有子目录文件名进行批量改名的求助

本帖最后由 thp2008 于 2023-5-21 13:33 编辑

我有这样一个需求:
就是长时间的下载了很多电影,现在需要对其进行整理,命令规范。需要根据List.TXT的关键字,按照从上到下的顺序,将所有电影名称中的这些关键字删除掉。一定要注意,List.TXT的关键字必须是从上到下的顺序。

需求一:
改名的批处理,我有个现成的,单独操作是可以的,现在想结合List.txt自动操作。请帮我结合修改一下。

改名的批处理:
  1. @echo off
  2. setlocal
  3. set /p oldname=请输入批量改名中需要更换的重复部分:
  4. set /p newname=请输入新的替换后的部分:
  5. set /p wildcard=请输入文件名通配符列表(缺省为所有文件,即“*”):
  6. for /f "usebackq delims=" %%i in (`dir /s/b/a-d %wildcard%`) do (
  7. setlocal enabledelayedexpansion
  8. set var=%%~nxi
  9. set "var=!var:%oldname%=%newname%!"
  10. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  11. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
  12. endlocal
  13. )
  14. endlocal
复制代码
List.txt 的内容如下:
  1. .中文字幕
  2. .韩语中字
  3. .中英双字
  4. .中英双字幕
  5. .英语中字
  6. .俄语中字
  7. .日语中字
  8. .粤语中字
  9. .法语中字
  10. .高清中字
  11. .国语中字
  12. .德语中字
  13. .国俄双语
  14. .国波双语中字
  15. .俄英双语双字
  16. .国英双语双字
  17. .国粤英三语中字
  18. .国粤英三语.中英双字幕
  19. .国英双语.中英双字幕
  20. .日英双语.中英双字幕
  21. .泰语中字
  22. .法粤双语中字
  23. .韩版中英双字幕
  24. .国日双语中字
  25. .法语中英双字
  26. .国粤双语.中英双字幕
  27. .国语中英双字
  28. .英国粤三语双字
  29. .国粤英三语双字
  30. .西班牙语中字
  31. .国粤日三语中字
  32. .意大利语中字
  33. .国法双语中字
  34. .BD1280高清中字
  35. .国粤双语中字
  36. .国英双语中字
  37. .国英双语双字
  38. .国印双语中字
  39. .BD粤语中字
  40. .日语中英双字
  41. -国语
  42. .BD幕
  43. .1080p幕
  44. .720p幕
  45. .216p幕
  46. .中字
  47. 加长版
  48. 电影版
  49. 导演剪辑版
  50. .BD
  51. .HD
  52. [
  53. ]
复制代码
需求二:
上面的删除关键字操作完成后,还需要对以下三种情况进行替换操作。

1、就是将所有文件名中的冒号“:”换成 点 “.”
2、就是将所有文件名中的"4K" 换成 “2160P”
3、就是将所有文件名中的连续两个点".." 替换成一个点"."

我每项单独操作是没有问题的,就是想,把这些功能,写成一个批处理。还请大侠们帮忙,万分感谢!
作者: thp2008    时间: 2023-5-21 12:55

我自已折腾了一个,后面三段是可以的,满足需求二。但是第一段A001,执行后,也没有报错,但是没有改名。还请帮我解决一下,谢谢!
  1. @echo off
  2. :A001
  3. setlocal
  4. for /f %%a in (List.txt) do set oldname=%%a
  5. set newname=
  6. for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
  7. setlocal enabledelayedexpansion
  8. set var=%%~nxi
  9. set "var=!var:%oldname%=%newname%!"
  10. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  11. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
  12. endlocal
  13. )
  14. endlocal
  15. :A002
  16. setlocal
  17. set oldname=4K
  18. set newname=2160P
  19. for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
  20. setlocal enabledelayedexpansion
  21. set var=%%~nxi
  22. set "var=!var:%oldname%=%newname%!"
  23. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  24. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
  25. endlocal
  26. )
  27. endlocal
  28. :A003
  29. setlocal
  30. set oldname=:
  31. set newname=.
  32. for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
  33. setlocal enabledelayedexpansion
  34. set var=%%~nxi
  35. set "var=!var:%oldname%=%newname%!"
  36. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  37. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
  38. endlocal
  39. )
  40. endlocal
  41. :A004
  42. setlocal
  43. set oldname=..
  44. set newname=.
  45. for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
  46. setlocal enabledelayedexpansion
  47. set var=%%~nxi
  48. set "var=!var:%oldname%=%newname%!"
  49. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  50. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
  51. endlocal
  52. )
  53. endlocal
复制代码

作者: 77七    时间: 2023-5-21 13:13

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.mp4') do (
  4. set "name=%%~nxi"
  5. for /f "delims=" %%a in ('type "List.TXT"') do (
  6. set "name=!name:%%a=!"
  7. )
  8. ren "%%i" "!name!"
  9. )
  10. endlocal
  11. pause
  12. @echo off
  13. for /f "delims=" %%a in ('dir /b /s /a-d *.mp4') do (
  14. set "newname=%%~nxa"
  15. set "fname=%%~fa"
  16. setlocal enabledelayedexpansion
  17. set "newname=!newname::=.!"
  18. set "newname=!newname:4K=2160p!"
  19. set "newname=!newname:..=.!"
  20. ren "!fname!" "!newname!"
  21. endlocal
  22. )
  23. pause
复制代码

使用前先测试
作者: terse    时间: 2023-5-21 13:18

这么长 一次性在FOR里处理行不
作者: thp2008    时间: 2023-5-21 13:30

使用前先测试
77七 发表于 2023-5-21 13:13


感谢大神相助,我测试了一下,需求二的部分没问题,需求一的部分,凡是关键字里有中文,都不行,中括号成功了。还请帮助再处理一下,这个关键字。

这种关键字的就不行,我感觉是不是带中文都不行,我保存的也是ANSI。
  1. .高清中字
  2. .国语中字
  3. .德语中字
  4. .国俄双语
  5. .泰语中字
  6. -国语
  7. .BD幕
  8. 加长版
  9. 电影版
  10. 导演剪辑版
复制代码
这种关键字的可以
  1. .BD
  2. .HD
  3. [
  4. ]
复制代码

作者: thp2008    时间: 2023-5-21 13:31

感谢大神相助,我测试了一下,需求二的部分没问题,需求一的部分,凡是关键字里有中文,都不行,中括号 ...
thp2008 发表于 2023-5-21 13:30



    不好意思,搞定了,是List.txt也要保存为ANSI才行,我只是保存了批处理为ANSI。现在执行成功了。感谢!
作者: thp2008    时间: 2023-5-21 13:43

我修改了一下,文件类型,一键执行成功
再次感谢!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.mp4 *.mkv *.ts *.mov *.avi *.srt') do (
  4. set "name=%%~nxi"
  5. for /f "delims=" %%a in ('type "List.TXT"') do (
  6. set "name=!name:%%a=!"
  7. )
  8. ren "%%i" "!name!"
  9. )
  10. endlocal
  11. @echo off
  12. for /f "delims=" %%a in ('dir /b /s /a-d *.mp4') do (
  13. set "newname=%%~nxa"
  14. set "fname=%%~fa"
  15. setlocal enabledelayedexpansion
  16. set "newname=!newname::=.!"
  17. set "newname=!newname:4K=2160p!"
  18. set "newname=!newname:..=.!"
  19. ren "!fname!" "!newname!"
  20. endlocal
  21. )
复制代码

作者: terse    时间: 2023-5-21 16:27

按一楼List.txt内容顺序删的话, 含有”.国粤英三语.中英双字幕“文件名 开始删掉“.中英双字”的 然后就留下“国粤英三语幕” 这个结果对吧,
另外 也可以两个FOR合并为一个FOR
作者: thp2008    时间: 2023-5-22 13:46

本帖最后由 thp2008 于 2023-5-22 13:50 编辑
按一楼List.txt内容顺序删的话, 含有”.国粤英三语.中英双字幕“文件名 开始删掉“.中英双字”的 然后就留 ...
terse 发表于 2023-5-21 16:27


我上面发的顺序是没有调整的,我实际用的调整了,最长的关键字在最上面,倒序就好了。
如果多于两个点的,也没关系,多运行几次就好了。




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