标题: [文件操作] 【已解决】求助批处理按同名文本里的内容对MP4重命名 [打印本页]
作者: annwayili 时间: 5 天前 22:32 标题: 【已解决】求助批处理按同名文本里的内容对MP4重命名
具体情况:
1、在文件夹内许多的MP4,有对应的同名文本文件。
2、同名文本内只有一行文字。
目的:
1、同名MP4按同名文本内的文字内容进行重命名。
1.1 文字内容如果含非法字符,无法按其重命名时,该MP4在原名后面加“-重命名失败”以标示。
文字内容应该不会超长,所以可以不考虑此情形对重命名的影响。
1.2 如果目录内已存在同新名的MP4,则该MP4在新名后面加“(1)”等以标示。
2、如果某MP4没有同名的文本文件,则跳过。
如果某文本文件没有同名MP4,也跳过(不用理会)。
例如:文件夹内有“123春天.mp4”、“123春天.txt”文件,而“123春天.txt”里的内容为“今天天气非常好”。
经批处理运行后,“123春天.mp4”重命名为“今天天气非常好.mp4”。
请高手帮忙一个!
谢谢!
作者: Five66 时间: 5 天前 22:48
同名文本文件的编码是啥??
作者: annwayili 时间: 5 天前 22:52
回复 2# Five66
记事本打开后,显示是UTF-8
作者: aloha20200628 时间: 4 天前 00:46
回复 1# annwayili
以下代码须用 utf-8 编码存为 test.bat 运行,假设代码运行前当前目录中还没有名如 *(n).mp4 的文件(n=1,2,3,...)- @echo off &chcp 65001>nul &setlocal
- for %%F in (*.mp4) do if exist "%%~nF.txt" (
- set "s=" &set/p s=<"%%~nF.txt" &setlocal enabledelayedexpansion
- if exist "!s!%%~xF" (ren "%%F" "!s!(1)%%~xF") else ren "%%F" "!s!%%~xF"
- if exist "%%F" ren "%%F" "%%~nF-重命名失败%%~xF"
- endlocal) 2>nul
- pause&exit/b
复制代码
作者: annwayili 时间: 4 天前 05:41
本帖最后由 annwayili 于 2025-1-29 05:42 编辑
回复 4# aloha20200628
测试了,似乎不怎么完美。
如下图,我一共用7组文件测试,出现了三个不成功的例子。
无论如何,非常感谢出手相助!!
作者: Five66 时间: 4 天前 08:16
不知行否 , 使用前先测试 ,测试前先备份
保存为ansi编码的bat 放到mp4所在文件夹下运行
同名文本文件需要为无bom的utf-8- @echo off&pause&chcp 936 >nul
- set "_@@fail=-重命名失败"
- set "_z=("
- set "_y=)"
-
- chcp 65001>nul
- for /f "eol=/ delims=" %%a in ('dir /b "*.mp4"') do (
- set "_@@oldname=%%a"
- set "A_ext=%%~xa"
- if exist "%%~na.txt" (
- for /f "delims="eol^= %%b in ('type "%%~na.txt"') do (
- for /f tokens^=1^ delims^="/\<>|:?*" %%i in ("%%b") do (
- if "%%i" == "%%b" (
- set "_@@new=%%i"
- set /a @@=0
- call :aaa
- ) else (
- set "_@@new=%%~na%_@@fail%"
- set /a @@=0
- call :aaa
- )))))
- pause&exit/b
-
- :aaa
- set /a @@+=1
- if exist "%_@@new%%A_ext%" (
- set "_@@new=%_@@new%%_z%%@@%%_y%"
- goto :aaa
- )
- rename "%_@@oldname%" "%_@@new%%A_ext%"
- goto :eof
复制代码
作者: annwayili 时间: 4 天前 09:01
本帖最后由 annwayili 于 2025-1-29 09:13 编辑
回复 6# Five66
谢谢帮助!
测试通过!
~~只是双击BAT运行时,一下子被窗口里的提示“请按任意键继续”迷惑了,还以为没效果。
后来按了一下键盘,才知道此时才开始重命名
如果双击BAT运行就开始重命名,个人以为就更好了~~
作者: aloha20200628 时间: 4 天前 11:00
本帖最后由 aloha20200628 于 2025-1-29 11:03 编辑
回复 5# annwayili
大年初一拜完年抽空给楼主回个帖 ...
根据5楼附图中的红圈结果推断4楼代码中的 set/p ... 读取文本文件首行时撞上了空行,故其返回值为空值... (仍须楼主确认),如属实,删除对应文本文件中的第一个空行就是了
或改用以下有防空读取对策的代码(须用utf-8编码存盘)再试试- @echo off &chcp 65001>nul &setlocal
- for %%F in (*.mp4) do if exist "%%~nF.txt" (
- for /f "tokens=1* delims=:" %%a in ('findstr /v "^$" "%%~nF.txt"^|findstr /n ".*"^|findstr /b "1:" ') do set "s=%%b"
- setlocal enabledelayedexpansion
- if exist "!s!%%~xF" (ren "%%F" "!s!(1)%%~xF") else ren "%%F" "!s!%%~xF"
- if exist "%%F" ren "%%F" "%%~nF-重命名失败%%~xF"
- endlocal) 2>nul
- pause&exit/b
复制代码
作者: annwayili 时间: 4 天前 15:19
回复 8# aloha20200628
感谢帮助!
原文件在处理后已经删除了,所以这次没法试了。下次有机会再试试。
不过,应该不会前面有空行。详见我截图右侧的TXT文本,当时特意贴上去的。
作者: Five66 时间: 4 天前 18:45
回复 7# annwayili
加上暂停是为了防手误
将6楼代码第一行那里的&pause去掉就能直接开始了
还有同名文本文件没有处理多行的情况 , 多行时可能重复改名(虽然改不了)
也没有处理开头的英文空格 , 可能改出开头带英文空格的文件
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |