找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 69026|回复: 16

[文本处理] 批处理怎样 在文件夹名称的最后方 加上视频总时长

[复制链接]
发表于 2024-5-16 14:07:31 | 显示全部楼层 |阅读模式
本帖最后由 gddsssko 于 2024-5-16 14:08 编辑

批量获取子文件夹下mp4文件的总时长,将时长加入到子文件夹名中,精确到分钟就行。
 楼主| 发表于 2024-5-16 14:09:49 | 显示全部楼层
用通义前问折腾了好久都不行
发表于 2024-5-16 15:11:30 | 显示全部楼层
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. cd /d "%~dp0"
  5. for /f "delims=" %%d in ('dir /b /ad') do (
  6.         for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%% " "%%d\*.mp4"') do (
  7.                 for %%b in (%%a) do (
  8.                         set /a n+=%%b
  9.                 )
  10.         )
  11.         if defined n (
  12.                 set /a n/=1000*60
  13.                 call ren "%%d" "%%d-%%n%%min"
  14.                 set n=
  15.         )
  16. )
  17. pause
复制代码
发表于 2024-5-16 15:38:33 | 显示全部楼层
假如视频过长,用set /a 不合适了,我粗略算了一下,大概是超过580小时。以下代码使用powershell计算。
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. cd /d "%~dp0"
  5. for /f "delims=" %%d in ('dir /b /ad') do (
  6.         for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%%+" "%%d\*.mp4"') do (
  7.                 for /f "delims=." %%x in ('powershell -c "(%%a0)/1000/60"') do (
  8.                         ren "%%d" "%%d-%%xmin"
  9.                 )
  10.         )
  11. )
  12. pause
复制代码
 楼主| 发表于 2024-5-16 16:45:26 | 显示全部楼层
本帖最后由 gddsssko 于 2024-5-16 16:52 编辑

回复 4# 77七


    没反应,什么都没发生
蹦出黑窗口显示:Press any key to continue . . .之后什么都没有改变,3楼和4楼代码都是如此
发表于 2024-5-16 17:21:27 | 显示全部楼层
回复 5# gddsssko


请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2024-5-16 18:13:37 | 显示全部楼层
回复 5# gddsssko


   没效果应该是没找到文件夹或者mp4文件。
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
  5.         for /f "delims=" %%a in ('mediainfo --Output^="Video;%%Duration%%+" "%%d\*.mp4"') do (
  6.                 for /f "delims=." %%x in ('powershell -c "(%%a0)/1000/60"') do (
  7.                         echo ren "%%d" "%%~nxd-%%xmin"
  8.                 )
  9.         )
  10. )
  11. pause
复制代码


显示内容正确,删除echo 后再执行。



另外我在写代码中发现一个问题,65001代码页下,dir的结果经过sort排序后最后一个汉字会异常。
  1. @echo off
  2. chcp 65001
  3. md "1\新建文件夹"
  4. dir /b /s /ad "1" |sort /r
  5. pause
  6. exit
  7. 显示
  8. D:\1\新建文件?
复制代码
发表于 2024-5-16 18:18:17 | 显示全部楼层
  1. @echo off
  2. chcp 65001
  3. echo 批处理|sort
  4. pause
复制代码

这样也是异常的。
 楼主| 发表于 2024-5-16 20:25:49 | 显示全部楼层
回复 8# 77七


    还是不行,也不报错。
发表于 2024-5-16 20:39:56 | 显示全部楼层
回复 9# gddsssko


    文件夹、mediainfo软件、批处理文件 全部打包上传到网盘。
 楼主| 发表于 2024-5-16 21:09:45 | 显示全部楼层
本帖最后由 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#
发表于 2024-5-16 21:43:08 | 显示全部楼层
回复 11# gddsssko


   mediainfo 软件版本问题。我用的 网盘下载 https://f.ws59.cn/f/e4k8ccnbdsg
发表于 2024-5-16 22:06:13 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-16 22:39 编辑

回复 1# gddsssko

试试如下版本存为test.bat运行,楼主可修改 madiaInfo.exe 路径(代码第2行,路径可包含空格),代码只计入小时和分钟,忽略了秒数
假设楼主每个视频子目录中不一定仅有*.mp4,故稳妥起见,用mediaInfo每次处理单个文件的模式...

  1. @echo off &setlocal enabledelayedexpansion
  2. set "mF=c:\applications\MediaInfo.exe"
  3. for /f "delims=" %%d in ('dir /b/s/ad^|sort /r') do (
  4.         pushd "%%d"
  5.         for /f "delims=" %%F in (' dir /b/a-d "%%d\*.mp4" ') do (
  6.                 for /f "tokens=1-3 delims=:." %%a in (' call "%mF%" "--output=General;%%Duration/String3%%" "%%F" ') do (
  7.                         set "h=%%a"&set "m=%%b"&(if "0"=="!h:~,1!" set "h=!h:~1!")&(if "0"=="!m:~,1!" set "m=!m:~1!")
  8.                         set/a "t+=!h!*60+!m!" 2>nul
  9.                 )
  10.         )
  11.         ren "%%d" "%%~nd.{!t!m}"
  12.         set "t=" &popd
  13. )
  14. endlocal&pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享该软件写绝对路径方法,学习了!

查看全部评分

 楼主| 发表于 2024-5-16 22:12:17 | 显示全部楼层
回复 12# 77七


    OK了,感谢大佬,大佬最帅
发表于 2024-5-16 22:19:40 | 显示全部楼层
本帖最后由 buyiyang 于 2024-5-16 22:23 编辑

我之前在相同问题下写过一个,善于搜索
http://www.bathome.net/redirect.php?goto=findpost&pid=278109&ptid=68365
  1. @if(0)==(0) @echo off
  2. cd /d "%~dp0"
  3. for /d %%d in (*) do (
  4.     pushd "%%d"
  5.     for /f "delims=" %%i in ('dir /b /a-d "*.mp4"^|cscript /e:jscript /Nologo "%~f0"') do (
  6.     popd
  7.     ren "%%d" "%%d【%%i分】"
  8.     )
  9. )
  10. pause&exit
  11. @end
  12. objPlayer=new ActiveXObject("WMPlayer.OCX"),ws=WSH.stdin,durationInSeconds=0;
  13. while (!ws.atendofstream) {
  14.     var filePath = ws.readline();
  15.     var objMedia = objPlayer.newMedia(filePath);
  16.     durationInSeconds += objMedia.duration
  17. }
  18. WScript.Echo(Math.ceil(durationInSeconds/60));
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:21 , Processed in 0.021653 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表