标题: [文本处理] 批处理怎样 在文件夹名称的最后方 加上视频总时长 [打印本页]
作者: gddsssko 时间: 2024-5-16 14:07 标题: 批处理怎样 在文件夹名称的最后方 加上视频总时长
本帖最后由 gddsssko 于 2024-5-16 14:08 编辑
批量获取子文件夹下mp4文件的总时长,将时长加入到子文件夹名中,精确到分钟就行。
作者: gddsssko 时间: 2024-5-16 14:09
用通义前问折腾了好久都不行
作者: 77七 时间: 2024-5-16 15:11
- @echo off
- rem 批处理保存为utf-8编码格式
- chcp 65001 >nul
- cd /d "%~dp0"
- for /f "delims=" %%d in ('dir /b /ad') do (
- for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%% " "%%d\*.mp4"') do (
- for %%b in (%%a) do (
- set /a n+=%%b
- )
- )
- if defined n (
- set /a n/=1000*60
- call ren "%%d" "%%d-%%n%%min"
- set n=
- )
- )
- pause
复制代码
作者: 77七 时间: 2024-5-16 15:38
假如视频过长,用set /a 不合适了,我粗略算了一下,大概是超过580小时。以下代码使用powershell计算。- @echo off
- rem 批处理保存为utf-8编码格式
- chcp 65001 >nul
- cd /d "%~dp0"
- for /f "delims=" %%d in ('dir /b /ad') do (
- for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%%+" "%%d\*.mp4"') do (
- for /f "delims=." %%x in ('powershell -c "(%%a0)/1000/60"') do (
- ren "%%d" "%%d-%%xmin"
- )
- )
- )
- pause
复制代码
作者: gddsssko 时间: 2024-5-16 16:45
本帖最后由 gddsssko 于 2024-5-16 16:52 编辑
回复 4# 77七
没反应,什么都没发生
蹦出黑窗口显示:Press any key to continue . . .之后什么都没有改变,3楼和4楼代码都是如此
作者: Batcher 时间: 2024-5-16 17:21
回复 5# gddsssko
请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 77七 时间: 2024-5-16 18:13
回复 5# gddsssko
没效果应该是没找到文件夹或者mp4文件。- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
- for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%%+" "%%d\*.mp4"') do (
- for /f "delims=." %%x in ('powershell -c "(%%a0)/1000/60"') do (
- echo ren "%%d" "%%~nxd-%%xmin"
- )
- )
- )
- pause
复制代码
显示内容正确,删除echo 后再执行。
另外我在写代码中发现一个问题,65001代码页下,dir的结果经过sort排序后最后一个汉字会异常。
- @echo off
- chcp 65001
- md "1\新建文件夹"
- dir /b /s /ad "1" |sort /r
- pause
- exit
- 显示
- D:\1\新建文件?
复制代码
作者: 77七 时间: 2024-5-16 18:18
- @echo off
- chcp 65001
- echo 批处理|sort
- pause
复制代码
这样也是异常的。
作者: gddsssko 时间: 2024-5-16 20:25
回复 8# 77七
还是不行,也不报错。
作者: 77七 时间: 2024-5-16 20:39
回复 9# gddsssko
文件夹、mediainfo软件、批处理文件 全部打包上传到网盘。
作者: gddsssko 时间: 2024-5-16 21:09
本帖最后由 gddsssko 于 2024-5-16 21:15 编辑
回复 10# 77七
百度链接:https://pan.baidu.com/s/1cvUUL8j0R_I6uV6mxWGz5w 提取码:9miw
或者迅雷链接:https://pan.xunlei.com/s/VNy0XPdvfPPo9MtjMU_Sg50dA1?pwd=d65w#
作者: 77七 时间: 2024-5-16 21:43
回复 11# gddsssko
mediainfo 软件版本问题。我用的 网盘下载 https://f.ws59.cn/f/e4k8ccnbdsg
作者: aloha20200628 时间: 2024-5-16 22:06
本帖最后由 aloha20200628 于 2024-5-16 22:39 编辑
回复 1# gddsssko
试试如下版本存为test.bat运行,楼主可修改 madiaInfo.exe 路径(代码第2行,路径可包含空格),代码只计入小时和分钟,忽略了秒数
假设楼主每个视频子目录中不一定仅有*.mp4,故稳妥起见,用mediaInfo每次处理单个文件的模式...
- @echo off &setlocal enabledelayedexpansion
- set "mF=c:\applications\MediaInfo.exe"
- for /f "delims=" %%d in ('dir /b/s/ad^|sort /r') do (
- pushd "%%d"
- for /f "delims=" %%F in (' dir /b/a-d "%%d\*.mp4" ') do (
- for /f "tokens=1-3 delims=:." %%a in (' call "%mF%" "--output=General;%%Duration/String3%%" "%%F" ') do (
- set "h=%%a"&set "m=%%b"&(if "0"=="!h:~,1!" set "h=!h:~1!")&(if "0"=="!m:~,1!" set "m=!m:~1!")
- set/a "t+=!h!*60+!m!" 2>nul
- )
- )
- ren "%%d" "%%~nd.{!t!m}"
- set "t=" &popd
- )
- endlocal&pause&exit/b
复制代码
作者: gddsssko 时间: 2024-5-16 22:12
回复 12# 77七
OK了,感谢大佬,大佬最帅
作者: buyiyang 时间: 2024-5-16 22:19
本帖最后由 buyiyang 于 2024-5-16 22:23 编辑
我之前在相同问题下写过一个,善于搜索
http://www.bathome.net/redirect.php?goto=findpost&pid=278109&ptid=68365- @if(0)==(0) @echo off
- cd /d "%~dp0"
- for /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%i in ('dir /b /a-d "*.mp4"^|cscript /e:jscript /Nologo "%~f0"') do (
- popd
- ren "%%d" "%%d【%%i分】"
- )
- )
- pause&exit
- @end
- objPlayer=new ActiveXObject("WMPlayer.OCX"),ws=WSH.stdin,durationInSeconds=0;
- while (!ws.atendofstream) {
- var filePath = ws.readline();
- var objMedia = objPlayer.newMedia(filePath);
- durationInSeconds += objMedia.duration
- }
- WScript.Echo(Math.ceil(durationInSeconds/60));
复制代码
作者: buyiyang 时间: 2024-5-16 22:54
本帖最后由 buyiyang 于 2024-5-16 22:58 编辑
回复 8# 77七
这个确实奇怪,我将unicode字符集中的U+4e00~U+9fa6的中文字符集中逐一拿单个字符做了测试,
发现其中一部分能正确显示(集合A),其余的不能正确显示(集合B)。
发现其中有规律,一(U+4E00)、乀(U+4E40)……等可以正确显示,也就是说每隔64个便是A的字符;
B的字符如果是连续奇数个出现则最后一个字符不能正确显示,在实际输出中,如果是2n+1个字符,则该6n+3个字节的最后一个字节会变成0x3f,原因不明。
作者: 77七 时间: 2024-5-16 23:58
回复 16# buyiyang
谢谢大佬指点!大佬辛苦了!我是程序语言门外汉,既然这个规律复杂,以后我会注意避免在65001下使用sort。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |