Batcher 发表于 2023-11-15 12:01

BAT+MediaInfo根据编码时间或修改时间批量重命名视频文件

功能描述:

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

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

使用方法:

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

@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

效果截图:



特殊说明:

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

@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

xixicoco 发表于 2023-11-15 18:40

这个思路不错哈,支持
页: [1]
查看完整版本: BAT+MediaInfo根据编码时间或修改时间批量重命名视频文件