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 这个思路不错哈,支持
页:
[1]