使用批处理根据分辨率重命名我的视频文件
Posted
技术标签:
【中文标题】使用批处理根据分辨率重命名我的视频文件【英文标题】:Renaming my video files as per the resoltuion using batch 【发布时间】:2013-06-19 22:57:36 【问题描述】:我想根据视频文件的分辨率重命名我的视频文件,例如,对于 1080p 的视频“bla bla.mp4”,我想将其重命名为“bla bla [H.264 1080p] .该脚本应该能够自动检测视频的分辨率,并且如果文件已经重命名,则不应重命名它。我无法找到检查分辨率的方法,所以我尝试使用它对于 1080p 文件:
FOR /r %%a in (*.mp4) DO (IF EXIST *[H.264*.mp4 (
ECHO Already done)
ELSE (
REN "%%~a" "%%~na [H.264 1080p].mp4"))
但它的作用是一遍又一遍地检查已重命名的同一个文件,因此回复总是“已经完成”。
【问题讨论】:
【参考方案1】:这个问题超出了 SO 问题的范围。不过我还是会回答的,因为今天是星期天。
下载安装mediainfo命令行版 将mediainfo
二进制文件的路径添加到您的系统或用户PATH
环境变量中
复制重命名脚本,替换视频文件夹的路径,rename
命令前有一个安全的echo
,如果输出看起来不错就删除它
脚本测试已存在的和已处理的文件(由 Peter Wright 建议)
重命名脚本:
@echo off & setlocal
cd X:\video\path
for /f "delims=" %%i in ('dir /b /a-d *.mp4') do (
set "fnameo=%%~ni"
set "fnamee=%%~xi"
set "Height="
for /f "delims=" %%j in ('mediainfo "--Inform=Video;%%Height%%" "%%~i"') do set "Height=%%j"
setlocal enabledelayedexpansion
call set "selftest=%%fnameo:[H.264 !Height!p]=%%"
if "!selftest!" equ "!fnameo!" if not exist "!fnameo! [H.264 !Height!p]!fnamee!" (
echo rename "!fnameo!!fnamee!" "!fnameo! [H.264 !Height!p]!fnamee!"
)
endlocal
)
输出示例:
重命名“Handbrake.0.9.8.mp4”“Handbrake.0.9.8 [H.264 800p].mp4” 重命名“Hybrid.2012.10.21.1.mp4”“Hybrid.2012.10.21.1 [H.264 800p].mp4” 重命名“Womble.mp4”“Womble [H.264 1080p].mp4”【讨论】:
我建议您过滤掉"*[*].mp4"
形式的文件名,否则您将重命名在执行 dir
之前存在的已处理文件。显而易见的工具是findstr
- 但有一点不同,因为就建立适当的正则表达式而言,所需的掩码包含重要字符... :)
@PeterWright 谢谢,这是个好主意。我会看看我的朋友findstr
:)
非常感谢!虽然这解决了我根据分辨率重命名文件的问题,但它再次重命名了已经重命名的文件?有什么解决办法吗?
@MohammadNairAalam 我最近更改了已处理文件的代码。
@Endoro...虽然第一个运行良好,但对代码的更改只会导致 cmd 窗口现在崩溃...【参考方案2】:
这里有一个非常相似的问题: Windows batch file renames filename unexplainably in FOR loop
Peter Wright 发布了一个解决方案并给出了很好的解释:
试试
for /f "delims=" %%a in ('dir /b /a-d *.mp3') do ( 问题是 您的原始语法会找到下一个文件名 - 它会找到您的 重命名文件,因为新文件名(带前缀)在逻辑上是 '大于'旧。
使用 dir 建立一个文件名列表,并在它完成后处理该列表 已完全构建 - 因此列表不会随文件而变化 已重命名。
“delims=" 子句确保文件名的默认解析 无效 - 否则,文件名将被解释为 一系列 [空格分隔] 标记。
Peter Wright 于 6 月 20 日 4:28 回答
【讨论】:
【参考方案3】:IF EXIST 条件将始终在第一个文件重命名后通过,因为在写入时它将检查目录中是否存在文件名中包含“[H.264”的任何文件,而不仅仅是 %%a .
请咨询Batch file: Find if substring is in string (not in a file),了解如何在 %%a 中找到“[H.264”,这将导致预期结果。
【讨论】:
以上是关于使用批处理根据分辨率重命名我的视频文件的主要内容,如果未能解决你的问题,请参考以下文章