为重命名video批量添加输出文件

感谢David Ruhmann,昨天我得到了我的batch file为重命名video工作:

@echo off setlocal EnableExtensions EnableDelayedExpansion :: Create Empty Folder rd /Q "%Temp%\Temp" 2>nul & mkdir "%Temp%\Temp" :: Loop through Folders pushd "xPath=c:\processing" for /d %%D in (*) do call :Process "%%~fD" popd goto End :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Process <Parent> :: Folder Name set "xFolder=%~nx1" :: Set Sub Folder if not exist "%~1\VIDEO\" goto :eof pushd "%~1\VIDEO" :: Loop through Videos for /f "delims=" %%A in ('dir *.avi /b') do if exist "%%~fA" ( set "xDateWritten=%%~tA" set "xDateGMT=0000/00/00 00:00:00" for /f "tokens=1,2" %%X in ('robocopy . "%Temp%\Temp" "%%~nxA" /TS /FP /NS /NC /NP /NJH /NJS /NDL /L') do set "xDateGMT=%%X %%Y" rem Format = FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext echo %xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA ren "%%~fA" "%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" ) popd goto :eof :End endlocal pause 

但现在我需要添加一个额外的function。 重命名发生后,我希望脚本导出新的文件名后跟文件大小以字节为单位 ,并将video长度导出到CSV或其他Excel兼容的文件types。 因为这些都是video文件,所以如果我可以导出帧率帧的总数 ,那就太好了。 不知道这是否甚至在batch file的范围内。

这是一个修改,导出名称和大小为CSV文件。

改变这一点

 echo %xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA ren "%%~fA" "%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" 

进入这个

 set "xFrame=00,00000" for /f %%X in ('exiftool -p "$Framerate,$Framecount" "%%~fA"') do set "xFrame=%%~X" set "xSize=%%~zA" set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" echo !xName! ren "%%~fA" "!xName!" echo !xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv 

更新:

要获取媒体文件信息,我们将不得不使用第三方工具。 如

  1. ExifTool
  2. 媒体信息
  3. FFmpeg的

基于对ExifTool和MediaInfo的快速浏览,我更喜欢MediaInfo,因为它具有更一致的媒体文件Duration输出格式。 如何parsing信息的例子。

 for /f "tokens=2,*" %X in ('mediainfo file.avi ^| find "Duration "') do @echo %Y 

更新2:

在答案中增加了exiftool的例子。

这是对我们的长评论stream的回复。

改变这一点

 set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xDateWritten:~11,2!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" 

进入这个

 set "xHour=!xDateWritten:~11,2!" if "!xDateWritten:~17,2!"=="PM" set /a "xHour+=12" set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xHour!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" 

完整的脚本(添加评论)

 @echo off setlocal EnableExtensions EnableDelayedExpansion :: Create Empty Folder rd /Q "%Temp%\Temp" 2>nul & mkdir "%Temp%\Temp" :: Loop through Folders pushd "xPath=c:\processing" for /d %%D in (*) do call :Process "%%~fD" popd goto End :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Process <Parent> :: Folder Name set "xFolder=%~nx1" :: Set Sub Folder if not exist "%~1\VIDEO\" goto :eof pushd "%~1\VIDEO" :: Loop through Videos for /f "delims=" %%A in ('dir *.avi /b') do if exist "%%~fA" ( rem Retrieve the file time stamp set "xDateWritten=%%~tA" rem Retrieve the Seconds using RoboCopy set "xDateGMT=0000/00/00 00:00:00" for /f "tokens=1,2" %%X in ('robocopy . "%Temp%\Temp" "%%~nxA" /TS /FP /NS /NC /NP /NJH /NJS /NDL /L') do set "xDateGMT=%%X %%Y" rem Retrieve the Video frame information set "xFrame=00,00000" for /f %%X in ('exiftool -p "$Framerate,$Framecount" "%%~fA"') do set "xFrame=%%~X" rem Retrieve the file size set "xSize=%%~zA" rem Adjust to 24 hours set "xHour=!xDateWritten:~11,2!" if "!xDateWritten:~17,2!"=="PM" set /a "xHour+=12" rem Format = FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext set "xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWritten:~6,4!!xDateWritten:~0,2!!xDateWritten:~3,2!-!xHour!h-!xDateWritten:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%%~xA" rem Display, Rename, and Save echo !xName! ren "%%~fA" "!xName!" echo !xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv ) popd goto :eof :End endlocal pause 
Interesting Posts