Excel 添加用于重命名视频批处理的输出文件
感谢David Ruhmann,昨天我得到了用于重命名视频的批处理文件:Excel 添加用于重命名视频批处理的输出文件,excel,ms-access,video,batch-file,frame-rate,Excel,Ms Access,Video,Batch File,Frame Rate,感谢David Ruhmann,昨天我得到了用于重命名视频的批处理文件: @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 c
@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
@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
::创建空文件夹
rd/Q“%Temp%\Temp”2>nul&mkdir“%Temp%\Temp”
::循环浏览文件夹
pushd“xPath=c:\processing”
对于(*)中的/d%%d,执行调用:处理“%%~fD”
邻苯二胺
转到终点
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:进程
::文件夹名称
设置“xFolder=%~nx1”
::设置子文件夹
如果不存在“%~1\VIDEO\”转到:eof
pushd“%~1\VIDEO”
::循环浏览视频
对于/f“delims=”('dir*.avi/b')中的%%A,如果存在则执行“%%~fA”(
设置“xDateWrite=%%~tA”
设置“xDateGMT=0000/00/00:00:00”
对于('robocopy.%Temp%\Temp”“%~nxA”/TS/FP/NS/NC/NP/NJH/NJS/NDL/L)中的/f“令牌=1,2”%%X,请设置“xDateGMT=%%X%%Y”
rem格式=FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext
echo%xFolder:~0,2%-%xFolder:~2,2%!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xDateWrited:~11,2!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%xA
ren“%%~fA”“%xFolder:~0,2%-%xFolder:~2,2%!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xDateWrited:~11,2!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%~xA”
)
邻苯二胺
后藤:eof
:结束
端部
暂停
但现在我需要添加一个附加功能。重命名完成后,我希望脚本将新文件名、文件大小(以字节为单位)以及视频长度导出到csv或其他excel兼容的文件类型。因为这些都是视频文件,如果我能导出帧率和总帧数,那就太好了。不确定这是否在批处理文件的范围内。这里有一个修改,可以将名称和大小导出到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 "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 "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
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"
更新:
要获取媒体文件信息,我们必须使用第三方工具。比如
通过快速查看ExifTool和MediaInfo,我更喜欢MediaInfo,因为它的媒体文件持续时间输出格式更加一致。如何解析信息的示例
for /f "tokens=2,*" %X in ('mediainfo file.avi ^| find "Duration "') do @echo %Y
更新2:
在答案中添加了exiftool示例。这是对我们的长评论流的回复。
改变这个
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 "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 "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
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关闭
setlocal EnableExtensions EnableDelayedExpansion
::创建空文件夹
rd/Q“%Temp%\Temp”2>nul&mkdir“%Temp%\Temp”
::循环浏览文件夹
pushd“xPath=c:\processing”
对于(*)中的/d%%d,执行调用:处理“%%~fD”
邻苯二胺
转到终点
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:进程
::文件夹名称
设置“xFolder=%~nx1”
::设置子文件夹
如果不存在“%~1\VIDEO\”转到:eof
pushd“%~1\VIDEO”
::循环浏览视频
对于/f“delims=”('dir*.avi/b')中的%%A,如果存在则执行“%%~fA”(
rem检索文件时间戳
设置“xDateWrite=%%~tA”
rem使用RoboCopy检索秒数
设置“xDateGMT=0000/00/00:00:00”
对于('robocopy.%Temp%\Temp”“%~nxA”/TS/FP/NS/NC/NP/NJH/NJS/NDL/L)中的/f“令牌=1,2”%%X,请设置“xDateGMT=%%X%%Y”
rem检索视频帧信息
设置“xFrame=0000000”
对于/f%%X in('exiftool-p“$Framerate,$Framecount”“%%~fA“'),请设置“xFrame=%%~X”
rem检索文件大小
设置“xSize=%%~zA”
rem调整为24小时
设置“xHour=!xDateWrited:~11,2!”
如果“!xDateWrited:~17,2!”==“PM”集/a“xHour+=12”
rem格式=FF-FF-YYYYMMDD-HHh-MMm-SSs-FF-FF.ext
设置“xName=%xFolder:~0,2%-%xFolder:~2,2%-!xDateWrited:~6,4!!xDateWrited:~0,2!!xDateWrited:~3,2!-!xHour!h-!xDateWrited:~14,2!m-!xDateGMT:~17,2!s-%xFolder:~4,2%-%xFolder:~6,2%%xFolder:~xA”
rem显示、重命名和保存
echo!xName!
任“%%~fA”!xName!”
echo!xName!,!xSize!,!xFrame!>>C:\RenameOutput.csv
)
邻苯二胺
后藤:eof
:结束
端部
暂停
close,但输出的持续时间只是给出了结束时间,而不是视频的实际持续时间。对于我当前使用的测试文件,视频将在上午7:00开始,并在上午7:30结束,给我们30分钟的持续时间,无论哪种方式,都需要几秒钟。@Shiken啊,我明白了。所以你需要实际的长度。有两种方法可以让我们从我头脑中了解到的信息中获得这些信息。1.通过第三方视频命令行工具。2.长度=上次写入-创建日期(如果在原始写入之后进行任何修改,则可能不准确)@Shiken 1。exiftool可能是我的首选(,)2。MediaInfo()或3。FFMPEGA在使用exiftool之后,exiftool-csv-r-framerate-framecount%1>>c:\processing\exifoutput.csv提供了我目前所需的信息,现在我只想知道如何将其与旧代码合并。@Shiken我已经在回答中添加了关于如何添加exiftool输出的内容。是否有一种特定的格式,您想要它的大小,长度、帧速率和要输入的帧数?示例:Length=00h00m00s00ms或00:00:00:00size=bytes xxx,xxx,xxx Length=hh:mm:ss framerate=xx max frames=xxxxx edit:从技术上讲,如果我们要拉帧,我们不需要持续时间,它只会在需要时用于计算最大帧。