标题: [文件操作] 【已解决】求助批处理通过文件名列表对文件进行重命名 [打印本页]
作者: 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 ------>新增文件,保存处理失败的内容
尝试了一个批处理,但确实水平有限,无论是从判断字符串是否相同,还是用文件是否存在等方式,都无法做到主要目的,所以就法继续下去了。- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1 delims=" %%a in (武松合集文件列表.txt) do (
- set str1=%%a
- set var1=!str1:~3!
- for %%b in (*.mp4) do (
- if !%%b! equ !var1! (
- echo %%aOK
- ) else echo !var1! 不OK
- )
- )
- pause
复制代码
以上情况,具体也见下图:
请各位指导!非常感谢!
作者: qixiaobin0715 时间: 2024-1-4 16:06
不明白到底是遇虎失败还是认兄失败?
作者: 77七 时间: 2024-1-4 16:22
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- for /f "useback delims=" %%a in ("武松合集文件列表.txt") do (
- for /f "tokens=* delims=1234567890" %%x in ("%%a") do (
- if exist "%%x.mp4" (
- ren "%%x.mp4" "%%a.mp4"
- ) else (
- >>"重命名失败.txt" echo %%a
- )
- )
- )
- pause
复制代码
作者: annwayili 时间: 2024-1-4 20:38
本帖最后由 annwayili 于 2024-1-4 20:46 编辑
回复 2# qixiaobin0715
多谢关注及指出表述错误。
认兄 应该是004的前缀,我在一楼中说错了,图片也画得不对。
所以,遇虎是没能成功重命名的。
三楼的BAT是正解!非常完美,非常感谢!
作者: qixiaobin0715 时间: 2024-1-5 10:47
按照楼主的思路可以这样:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (武松合集文件列表.txt) do (
- set str=%%a
- if exist "!str:~3!.mp4" (
- ren "!str:~3!.mp4" "%%a.mp4"
- ) else (
- echo,%%a
- )
- ))>"重命名失败.txt"
- pause
复制代码
作者: annwayili 时间: 2024-1-5 21:07
回复 5# qixiaobin0715
十分感谢!同样能达到希望的效果!
同时,我学到更多了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |