Board logo

标题: [文件操作] 【已解决】求助批处理通过文件名列表对文件进行重命名 [打印本页]

作者: annwayili    时间: 2024-1-4 13:57     标题: 【已解决】求助批处理通过文件名列表对文件进行重命名

本帖最后由 annwayili 于 2024-1-4 20:45 编辑

试写了一个BAT但不成功,所以特向大家求助!

当前目录下有一些MP4文件和其它文件。
拟通过本目录下的文件名列表(武松合集文件列表.txt),
需求1:对本目录下的部分文件按该列表中的名字进行重命名。 (其实就是在视频合集文件名前面加上序号)
需求2:对在列表中有,但本目录下不存在的文件,新建立一个”重命名失败.txt”。

本目录下的文件如下:
武松合集文件列表.txt
武松打虎 喝酒.mp4
武松打虎 上山.mp4
武松打虎 认兄.mp4
林冲棒打洪教头.mp4     ----->属于无关的其它文件
鲁智深拳打镇关西.mp4  ----->属于无关的其它文件
ABC.txt                    ------>属于无关的其它文件

”武松合集文件列表.txt“中的内容如下:
001武松打虎 喝酒
002武松打虎 上山
003武松打虎 遇虎
004武松打虎 认兄

最终的处理结果希望当前目录下的文件如下:
武松合集文件列表.txt
001武松打虎 喝酒.mp4
002武松打虎 上山.mp4
003武松打虎 认兄.mp4                                           ----->这里写错了,应该是004武松打虎 认兄
林冲棒打洪教头.mp4     ----->属于无关的其它文件,不变
鲁智深拳打镇关西.mp4  ----->属于无关的其它文件,不变
ABC.txt                    ------>属于无关的其它文件,不变
重命名失败.txt            ------>新增文件,保存处理失败的内容

尝试了一个批处理,但确实水平有限,无论是从判断字符串是否相同,还是用文件是否存在等方式,都无法做到主要目的,所以就法继续下去了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1 delims=" %%a in (武松合集文件列表.txt) do (
  4. set str1=%%a
  5. set var1=!str1:~3!
  6. for %%b in (*.mp4) do  (
  7. if  !%%b! equ !var1! (
  8. echo %%aOK
  9. ) else echo !var1! 不OK
  10. )
  11. )
  12. pause
复制代码
以上情况,具体也见下图:




请各位指导!非常感谢!
作者: qixiaobin0715    时间: 2024-1-4 16:06

不明白到底是遇虎失败还是认兄失败?
作者: 77七    时间: 2024-1-4 16:22

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f "useback delims=" %%a in ("武松合集文件列表.txt") do (
  5. for /f "tokens=* delims=1234567890" %%x in ("%%a") do (
  6. if exist "%%x.mp4" (
  7. ren "%%x.mp4" "%%a.mp4"
  8. ) else (
  9. >>"重命名失败.txt" echo %%a
  10. )
  11. )
  12. )
  13. pause
复制代码

作者: annwayili    时间: 2024-1-4 20:38

本帖最后由 annwayili 于 2024-1-4 20:46 编辑

回复 2# qixiaobin0715

不明白到底是遇虎失败还是认兄失败?


多谢关注及指出表述错误。
认兄 应该是004的前缀,我在一楼中说错了,图片也画得不对。

所以,遇虎是没能成功重命名的。

三楼的BAT是正解!非常完美,非常感谢!
作者: qixiaobin0715    时间: 2024-1-5 10:47

按照楼主的思路可以这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (武松合集文件列表.txt) do (
  4.     set str=%%a
  5.     if exist "!str:~3!.mp4" (
  6.         ren "!str:~3!.mp4" "%%a.mp4"
  7.     ) else (
  8.         echo,%%a
  9.     )
  10. ))>"重命名失败.txt"
  11. pause
复制代码

作者: annwayili    时间: 2024-1-5 21:07

回复 5# qixiaobin0715

十分感谢!同样能达到希望的效果!
同时,我学到更多了




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