吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1340|回复: 1
收起左侧

[其他原创] BAT+MediaInfo根据编码时间或修改时间批量重命名视频文件

[复制链接]
Batcher 发表于 2023-11-15 12:01
功能描述:

对于杂乱无章的视频文件名使用同一个的格式进行重命名。
如无重名文件,则新的文件名格式为:年月日-时分秒.扩展名
如有重名文件,则新的文件名格式为:年月日-时分秒-数字.扩展名

新文件名中的时间戳获取规则如下:
首先尝试获取视频文件的编码时间。
如果无法获取编码时间,则获取视频文件的最后修改时间。

使用方法:

以下代码保存为 ChangeNameByTime-1.bat 和待处理的视频文件放到同一个目录下。
下载命令行工具 MediaInfo 解压缩之后把 MediaInfo.exe 和待处理的视频文件放到同一个目录下。
双击执行 ChangeNameByTime-1.bat 脚本。
测试代码之前请注意做好备份。

[Asm] 纯文本查看 复制代码
@echo off
REM 1、下载 MediaInfo 这个命令行工具
REM https://mediaarea.net/download/binary/mediainfo/23.10/MediaInfo_CLI_23.10_Windows_x64.zip
REM 2、解压缩之后把 MediaInfo.exe 和此脚本放在同一个文件夹下

REM 根据实际需要修改待处理的视频扩展名列表
set ExtList=*.mp4 *.wav *.rmvb *.mkv *.ts *.wmv *.avi

cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /a-d %ExtList%') do (
    set "OldName=%%i"
    set "Backslash1=%~dp0%%i"
    setlocal enabledelayedexpansion
    set "EncoTime=0"
    for /f "tokens=1-6 delims=-: " %%a in ('MediaInfo.exe --Inform^="General;%%Encoded_Date%%" "%%i"') do (
        set "EncoTime=%%a%%b%%c-%%d%%e%%f"
    )
    if not !EncoTime! == 0 (
        set "NewName=!EncoTime!"
    ) else (
        set "Backslash2=!Backslash1:\=\\!"
        setlocal disabledelayedexpansion
        for /f "tokens=1-6 delims=.=" %%m in ('call wmic DataFile where "Name='%%Backslash2%%'" get LastModified /value ^| find "="') do (
            set "ModiTime=%%n"
        )
        setlocal enabledelayedexpansion
        set "ModiTime=!ModiTime:~0,8!-!ModiTime:~8!"
        set "NewName=!ModiTime!"
    )
    if exist "!NewName!%%~xi" (
        set "n=1"
        call :GetNextName !NewName! %%~xi
    )
    echo "!OldName!" ---^>" !NewName!%%~xi"
    ren "!OldName!" "!NewName!%%~xi"
    endlocal
    endlocal
    endlocal
)
pause
exit /b

:GetNextName
if exist "%1-!n!%2"  (
   set /a n+=1
   goto :GetNextName
)
set "NewName=%1-!n!"
goto :eof


效果截图:

20231115-1.png

特殊说明:

如果希望同时处理当前目录下的视频文件和子目录下的视频文件,请使用如下 ChangeNameByTime-2.bat 代码。
测试代码之前请注意做好备份。备份。备份。

[Asm] 纯文本查看 复制代码
@echo off
REM 1、下载 MediaInfo 这个命令行工具
REM https://mediaarea.net/download/binary/mediainfo/23.10/MediaInfo_CLI_23.10_Windows_x64.zip
REM 2、解压缩之后把 MediaInfo.exe 和此脚本放在同一个文件夹下

REM 根据实际需要修改待处理的视频扩展名列表
set ExtList=*.mp4 *.wav *.rmvb *.mkv *.ts *.wmv *.avi

cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /s /a-d %ExtList%') do (
    set "OldName=%%i"
    set "Backslash1=%%i"
    set ThisFolder=%%~dpi
    setlocal enabledelayedexpansion
    set "EncoTime=0"
    for /f "tokens=1-6 delims=-: " %%a in ('MediaInfo.exe --Inform^="General;%%Encoded_Date%%" "%%i"') do (
        set "EncoTime=%%a%%b%%c-%%d%%e%%f"
    )
    if not !EncoTime! == 0 (
        set "NewName=!EncoTime!"
    ) else (
        set "Backslash2=!Backslash1:\=\\!"
        setlocal disabledelayedexpansion
        for /f "tokens=1-6 delims=.=" %%m in ('call wmic DataFile where "Name='%%Backslash2%%'" get LastModified /value ^| find "="') do (
            set "ModiTime=%%n"
        )
        setlocal enabledelayedexpansion
        set "ModiTime=!ModiTime:~0,8!-!ModiTime:~8!"
        set "NewName=!ModiTime!"
    )
    if exist "!NewName!%%~xi" (
        set "n=1"
        call :GetNextName !NewName! %%~xi !ThisFolder!
    )
    echo "!OldName!" ---^>" !NewName!%%~xi"
    ren "!OldName!" "!NewName!%%~xi"
    endlocal
    endlocal
    endlocal
)
pause
exit /b

:GetNextName
if exist "!ThisFolder!%1-!n!%2"  (
   set /a n+=1
   goto :GetNextName
)
set "NewName=%1-!n!"
goto :eof

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xixicoco 发表于 2023-11-15 18:40
这个思路不错哈,支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表