给一个不调用ffprobe.exe的bat+jscript混编版本,直接调用windows系统内置的fso功能获取媒体文件属性(如时长),与用ffprobe.exe/mediainfo.exe等外部方法对比可明显提速(尤其是大目录操作),因批处理脚本调用后者是逐个文件处理,而前者能一次性批量处理。
以下代码可存为test.bat,将一级目录拖给它即可,完成一级目录及其子目录的更名》源目录名【时长】。 | @set @v=1 /* | | @echo off | | if "%~1"=="" (exit/b) else (setlocal enabledelayedexpansion) | | (for /f "delims=" %%D in (' dir /b/s/ad "%~1" ') do ( | | for /f %%v in (' " dir/b/s/a-d "%%~D\*.mp4"|cscript /e:jscript "%~f0" " ') do (set "m=%%v") | | set/a "mm+=!m!" & ren "%%~D" "%%~nxD【!m!】" | | ) | | ren "%~1" "%~nx1【!mm!】" & endlocal & exit/b) 2>nul | | */ | | m = s = ms = sm = 0, ws = WSH.stdin, sa = WSH.createobject('shell.application'); | | while (!ws.atendofstream) { | | F = ws.readline(); i = F.lastIndexOf('\\'), pF = F.substr(0,i+1), nF = F.substr(i+1); | | ns = sa.namespace(pF), pn = ns.parsename(nF); d = ns.getdetailsof(pn,27).split(':'); | | m += ~~d[0]*60 + ~~d[1]; s += ~~d[2]; | | } | | WSH.echo(m+=Math.ceil(s/60));COPY |
|