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

回复 15# ShowCode


    感谢ShowCode大大指点,刚才测试新代码,能达到改名效果了,不过看代码的红色部分再结合自己在顶楼描述的需求情况后,感觉这个代码似乎不是很符合1L的需求描述,所以自己在这个代码上稍微修改了一下改名的文件名指定
  1. @echo off
  2. for %%a in ("*GRANBLUE FANTASY*.mkv" "*GRANBLUE FANTASY*.ass") do (
  3.     for /f "tokens=2,4 delims=[]-" %%b in ("%%~na") do (
  4.          ren "%%~a" "GRANBLUE_FANTASY_%%c%%~xa"
  5.     )
  6. )
  7. pause
复制代码
自己测试效果,能达到自己想要的指定一个文件名、获取原文件名中的集数组合到指定的文件名里改成新的文件名的效果,不过好像只能针对“[FLsnow&SumiSora][GRANBLUE FANTASY-The Animation][01][TVRIP][1080p][HEVC_AAC].mkv”这个格式内容的原文件名才有效?
在1L提到过的,Arrow.S05E18.1080p.WEB-DL.DD5.1.H264-RARBG.mkv 用这个代码似乎就不行了,推测为集数部分的格式不同,还请ShowCode大大指点该如何修改代码来对应这种格式的呢?

TOP

回复 15# ShowCode

已测试用这个代码修改文件名关键字来给其他名字内容的视频和字幕改名,发现有小问题。

比如:[Suzu-Kaze&LoliHouse] Sword Oratoria - 01 [WebRip 1920x1080 HEVC-yuv420p10 AAC]/[Suzu-Kaze&LoliHouse] Sword Oratoria - 01 [WebRip 1920x1080 HEVC-yuv420p10 AAC].mkv,用
  1. @echo off
  2. for %%a in ("*Sword Oratoria*.mkv" "*Sword Oratoria*.ass") do (
  3.     for /f "tokens=2,4 delims=[]-" %%b in ("%%~na") do (
  4.          ren "%%~a" "Sword_Oratoria_%%c%%~xa"
  5.     )
  6. )
  7. pause
复制代码
结果会比较奇怪的在下划线和集数之间、集数和“.”之间都多出一个空格:Sword_Oratoria_ 01 .mkv。

如果是:Arrow.S05E18.1080p.WEB-DL.DD5.1.H264-RARBG.mkv,用
  1. @echo off
  2. for %%a in ("*Arrow.S05*.mkv" "*Arrow.S05*.ass") do (
  3.     for /f "tokens=2,4 delims=[]-" %%b in ("%%~na") do (
  4.          ren "%%~a" "Arrow.S05_%%c%%~xa"
  5.     )
  6. )
  7. pause
复制代码
来改名的话,改完后集数不见了……“Arrow.S05_.mkv”。有没有办法调整这个代码后,只需要调整文件名的关键字和集数的关键字,就可以通用的办法呢?

TOP

能否写出通用的代码,取决于是否能够总结出通用的规律。
以15楼代码为例:
tokens=2,4 delims=[]- 表示以左括号或右括号或减号为列分隔符,取第二列和第四列

[FLsnow&SumiSora][GRANBLUE FANTASY-The Animation][01][TVRIP][1080p][HEVC_AAC].mkv
第1列是红色
第2列是黄色
第3列是绿色
第4列是蓝色

请告诉我 Arrow.S05E18.1080p.WEB-DL.DD5.1.H264-RARBG.mkv 的规律是什么?
它的规律跟 [FLsnow&SumiSora][GRANBLUE FANTASY-The Animation][01][TVRIP][1080p][HEVC_AAC].mkv 的规律一样吗?

TOP

回复 18# ShowCode


    感谢ShowCode大大指点,这才明白,识别了关键字后,原来做的是以左括号或右括号或减号为列分隔符,取第二列和第四列,这样来达到的获取文件名和集数的效果的。
tokens=2,4 delims=[]-,这里能不能写成类似判断关键字的这种“in ("*Sword Oratoria*.mkv" "*Sword Oratoria*.ass") ”,用来判断文件名中是否含有这个有规律的“E”+“数字”组合起来的集数,如果能判断到这种组合的集数,就将E后面的数值取出来做新文件名的集数,这应该是一个规律,只要能按照这个规律取到集数,可以像L16我改的改名部分那样,在代码里直接指定新的文件名,组合上取到的集数后,就达到预期效果了,只是不知道该怎么写。

TOP

回复 19# xinjinjie


delims只能以指定的字符做分隔符,它本身不具备判断功能。
如果所有文件名里面都包含 S数字数字E数字数字 这种格式,那么可以想别的办法来实现。

TOP

本帖最后由 pcl_test 于 2017-4-25 17:43 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str1=GRANBLUE FANTASY"
  3. set "str2=[??]"
  4. set "str1_1=%str1%"
  5. set "str2_1=%str2%"
  6. for %%a in (.,$,^^^^,[,]) do (
  7.     set "str1_1=!str1_1:%%a=\%%a!"
  8.     set "str2_1=!str2_1:%%a=\%%a!"
  9. )
  10. set "str2_1=%str2_1:?=[0-9]%"
  11. set "t=%str2%fedcba987654321"&set /a n=0x!t:~15,1!
  12. for /l %%a in (0 1 %n%) do (
  13.     if "!str2:~%%a,1!" equ "?" set _#%%a=%%a
  14. )
  15. for /f "delims=" %%a in ('dir /a-d/b *.mkv *.ass^|findstr /irc:".*%str1_1%.*%str2_1%"') do (
  16.     call :rn "%%a"
  17. )
  18. pause&exit
  19. :rn
  20. set "fn=%~n1"
  21. set "fn=!fn:%str1%=!"
  22. set m=0
  23. :loop
  24. set "s="
  25. set "tmp=!fn:~%m%,%n%!"
  26. for /f "tokens=2 delims==" %%b in ('set _#') do set "s=!s!!tmp:~%%b,1!"
  27. for /f "tokens=1* delims=9876543210" %%c in ("#!s!") do (
  28.     if "%%c%%d" equ "#" (
  29.         for /l %%e in (0 1 9) do set "tmp=!tmp:%%e=!"
  30.         if "!tmp!" equ "%str2:?=%" (
  31.             echo;ren "%~1" "%str1%_!s!%~x1"
  32.             goto :eof
  33.         )
  34.     )
  35. )
  36. set /a m+=1
  37. if "!tmp!" neq "" goto loop
复制代码
1

评分人数

    • xinjinjie: 完全符合设想的功能和效果,再次感谢版主大 ...技术 + 1

TOP

回复 21# pcl_test


    感谢版主的代码指点,已测试目前遇到的几种文件名,通过修改str1、str2的关键字内容可以正确的判断到文件名和集数,通过调整ren语句中的新文件名部分代码,可以用关键字来改名,也可以在这里强行指定一个新文件名,最后可以和获取到的集数组合成新的文件名,完全符合设想的功能和效果。再次感谢版主大大的分享和指点,谢谢。

TOP

返回列表