[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
长篇大论,看不懂楼主到底希望得到什么结果。
如果只是希望获取Delay relative to video后面的字符串并赋值给变量,可以这样:
  1. @echo off
  2. for /f "tokens=2 delims=:" %%i in ('MediaInfo 1.avi ^| find /i "Delay relative to video"') do set "s=%%i"
复制代码
如果希望把结果进一步转换成毫秒,可以这样:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=2 delims=:" %%i in ('MediaInfo 1.avi ^| find /i "Delay relative to video"') do (
  3.     set "s=%%i+0"
  4.     set "s=!s:h=*3600*1000+!"
  5.     set "s=!s:min=*60*1000+!"
  6.     set "s=!s:ms=!"
  7.     set "s=!s:s=*1000+!"
  8.     if "!s:-=!" NEQ "!s!" set "s=!s:-=-1*(!)"
  9.     set /a "t=!s!"
  10.     echo;!t!
  11. )
  12. pause
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2018-10-8 10:23 编辑

回复 3# xp3000


    你这个需求用 grep + sed 完全就是多余的, 既方便不了半分,也不见得效率会提高。系统自带的 find 完全可以胜任。
2楼已经告诉你怎样获取延迟毫秒数,把这个结果与片头的毫秒数相加,就是总的延迟毫秒数,再转回 hh:mm:ss.ms 的形式即可。

PS: 不要把你的解题思路告诉别人,你的解题思路不一定正确。

TOP

回复 5# xp3000


   
C:\Users\WHY>set "s= -1 h 20 s"

C:\Users\WHY>set "s=%s:-=-1*(%)"

C:\Users\WHY>echo %s%
-1*(1 h 20 s)
1

评分人数

TOP

一个示例
  1. @echo off & setlocal enabledelayedexpansion
  2. set "s1=00:00:45.240"
  3. rem 片头毫秒数
  4. for /f "tokens=1-4delims=:." %%a in ("%s1%") do (
  5.     set /a "t1=(1%%a %% 100 *3600 + 1%%b %% 100 * 60 + 1%%c %% 100) * 1000 + 1%%d %% 1000"
  6. )
  7. rem 片头毫秒数 + 延迟毫秒数 = 总延迟毫秒数
  8. for /f "tokens=2 delims=:" %%i in ('MediaInfo 1.avi ^| find /i "Delay relative to video"') do (
  9.     set "s=%%i+0"
  10.     set "s=!s:h=*3600*1000+!"
  11.     set "s=!s:min=*60*1000+!"
  12.     set "s=!s:ms=!"
  13.     set "s=!s:s=*1000+!"
  14.     if "!s:-=!" NEQ "!s!" set "s=!s:-=-1*(!)"
  15.     set /a "t1 -= !s!"
  16. )
  17. rem 总延迟毫秒数转回 hh:mm:ss.ms 格式
  18. set /a  ms=t1%%1000+1000, t1/=1000, hh=t1/3600+100, mm=t1%%3600/60+100, ss=t1%%60+100
  19. set "t=!hh:~1!:!mm:~1!:!ss:~1!.!ms:~1!"
  20. echo;!t!
  21. pause
复制代码
1

评分人数

TOP

返回列表