标题: [文件操作] 【已解决】批处理对电影目录及所有子目录文件名进行批量改名的求助 [打印本页]
作者: thp2008 时间: 2023-5-21 12:07 标题: 【已解决】批处理对电影目录及所有子目录文件名进行批量改名的求助
本帖最后由 thp2008 于 2023-5-21 13:33 编辑
我有这样一个需求:
就是长时间的下载了很多电影,现在需要对其进行整理,命令规范。需要根据List.TXT的关键字,按照从上到下的顺序,将所有电影名称中的这些关键字删除掉。一定要注意,List.TXT的关键字必须是从上到下的顺序。
需求一:
改名的批处理,我有个现成的,单独操作是可以的,现在想结合List.txt自动操作。请帮我结合修改一下。
改名的批处理:- @echo off
- setlocal
-
- set /p oldname=请输入批量改名中需要更换的重复部分:
- set /p newname=请输入新的替换后的部分:
- set /p wildcard=请输入文件名通配符列表(缺省为所有文件,即“*”):
-
- for /f "usebackq delims=" %%i in (`dir /s/b/a-d %wildcard%`) do (
- setlocal enabledelayedexpansion
-
- set var=%%~nxi
- set "var=!var:%oldname%=%newname%!"
-
- if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
- echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
-
- endlocal
- )
-
- endlocal
复制代码
List.txt 的内容如下:- .中文字幕
- .韩语中字
- .中英双字
- .中英双字幕
- .英语中字
- .俄语中字
- .日语中字
- .粤语中字
- .法语中字
- .高清中字
- .国语中字
- .德语中字
- .国俄双语
- .国波双语中字
- .俄英双语双字
- .国英双语双字
- .国粤英三语中字
- .国粤英三语.中英双字幕
- .国英双语.中英双字幕
- .日英双语.中英双字幕
- .泰语中字
- .法粤双语中字
- .韩版中英双字幕
- .国日双语中字
- .法语中英双字
- .国粤双语.中英双字幕
- .国语中英双字
- .英国粤三语双字
- .国粤英三语双字
- .西班牙语中字
- .国粤日三语中字
- .意大利语中字
- .国法双语中字
- .BD1280高清中字
- .国粤双语中字
- .国英双语中字
- .国英双语双字
- .国印双语中字
- .BD粤语中字
- .日语中英双字
- -国语
- .BD幕
- .1080p幕
- .720p幕
- .216p幕
- .中字
- 加长版
- 电影版
- 导演剪辑版
- .BD
- .HD
- [
- ]
复制代码
需求二:
上面的删除关键字操作完成后,还需要对以下三种情况进行替换操作。
1、就是将所有文件名中的冒号“:”换成 点 “.”
2、就是将所有文件名中的"4K" 换成 “2160P”
3、就是将所有文件名中的连续两个点".." 替换成一个点"."
我每项单独操作是没有问题的,就是想,把这些功能,写成一个批处理。还请大侠们帮忙,万分感谢!
作者: thp2008 时间: 2023-5-21 12:55
我自已折腾了一个,后面三段是可以的,满足需求二。但是第一段A001,执行后,也没有报错,但是没有改名。还请帮我解决一下,谢谢!- @echo off
-
- :A001
- setlocal
- for /f %%a in (List.txt) do set oldname=%%a
- set newname=
- for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
- setlocal enabledelayedexpansion
- set var=%%~nxi
- set "var=!var:%oldname%=%newname%!"
- if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
- echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
- endlocal
- )
- endlocal
-
- :A002
- setlocal
- set oldname=4K
- set newname=2160P
- for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
- setlocal enabledelayedexpansion
- set var=%%~nxi
- set "var=!var:%oldname%=%newname%!"
- if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
- echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
- endlocal
- )
- endlocal
-
- :A003
- setlocal
- set oldname=:
- set newname=.
- for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
- setlocal enabledelayedexpansion
- set var=%%~nxi
- set "var=!var:%oldname%=%newname%!"
- if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
- echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
- endlocal
- )
- endlocal
-
- :A004
- setlocal
- set oldname=..
- set newname=.
- for /f "usebackq delims=" %%i in (`dir /s/b/a-d *`) do (
- setlocal enabledelayedexpansion
- set var=%%~nxi
- set "var=!var:%oldname%=%newname%!"
- if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
- echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul
- endlocal
- )
- endlocal
复制代码
作者: 77七 时间: 2023-5-21 13:13
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.mp4') do (
- set "name=%%~nxi"
- for /f "delims=" %%a in ('type "List.TXT"') do (
- set "name=!name:%%a=!"
- )
- ren "%%i" "!name!"
- )
- endlocal
- pause
- @echo off
- for /f "delims=" %%a in ('dir /b /s /a-d *.mp4') do (
- set "newname=%%~nxa"
- set "fname=%%~fa"
- setlocal enabledelayedexpansion
- set "newname=!newname::=.!"
- set "newname=!newname:4K=2160p!"
- set "newname=!newname:..=.!"
- ren "!fname!" "!newname!"
- endlocal
- )
- pause
复制代码
使用前先测试
作者: terse 时间: 2023-5-21 13:18
这么长 一次性在FOR里处理行不
作者: thp2008 时间: 2023-5-21 13:30
使用前先测试
77七 发表于 2023-5-21 13:13
感谢大神相助,我测试了一下,需求二的部分没问题,需求一的部分,凡是关键字里有中文,都不行,中括号成功了。还请帮助再处理一下,这个关键字。
这种关键字的就不行,我感觉是不是带中文都不行,我保存的也是ANSI。- .高清中字
- .国语中字
- .德语中字
- .国俄双语
- .泰语中字
- -国语
- .BD幕
- 加长版
- 电影版
- 导演剪辑版
复制代码
这种关键字的可以复制代码
作者: thp2008 时间: 2023-5-21 13:31
感谢大神相助,我测试了一下,需求二的部分没问题,需求一的部分,凡是关键字里有中文,都不行,中括号 ...
thp2008 发表于 2023-5-21 13:30
不好意思,搞定了,是List.txt也要保存为ANSI才行,我只是保存了批处理为ANSI。现在执行成功了。感谢!
作者: thp2008 时间: 2023-5-21 13:43
我修改了一下,文件类型,一键执行成功
再次感谢!- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *.mp4 *.mkv *.ts *.mov *.avi *.srt') do (
- set "name=%%~nxi"
- for /f "delims=" %%a in ('type "List.TXT"') do (
- set "name=!name:%%a=!"
- )
- ren "%%i" "!name!"
- )
- endlocal
-
- @echo off
- for /f "delims=" %%a in ('dir /b /s /a-d *.mp4') do (
- set "newname=%%~nxa"
- set "fname=%%~fa"
- setlocal enabledelayedexpansion
- set "newname=!newname::=.!"
- set "newname=!newname:4K=2160p!"
- set "newname=!newname:..=.!"
- ren "!fname!" "!newname!"
- endlocal
- )
复制代码
作者: 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 |