批处理文件 HH:MM:SS 转换为秒 Youtube-DL get-duration
Posted
技术标签:
【中文标题】批处理文件 HH:MM:SS 转换为秒 Youtube-DL get-duration【英文标题】:Batch file HH:MM:SS convert to seconds Youtube-DL get-duration 【发布时间】:2021-11-24 10:37:22 【问题描述】:所以我使用 Youtube-DL 并使用以下方法来获取视频的持续时间输出,但我遇到的问题是返回的时间以小时分秒为单位,而我需要它只是秒。
SET root_path=%~dp0
For /f "delims=" %%x in ('
%root_path%youtube-dl.exe --get-duration "https://youtu.be/hRgcgcTP7nM"
') do set "data=!data!%%x"
echo Video Length is %data%
echo In seconds %data:~-5%
echo Raw output is Hours:Minutes:Seconds
set data=1:10:00
IF /I 300 GTR %data% echo 300 seconds is more than %data%
pause
300 秒是 5 分钟,视频小于那个,但我无法让我的命令行读取小时分钟和秒格式进行比较
【问题讨论】:
那么是什么阻止您使用简单的数学将小时和分钟转换为秒?不知道你为什么使用 /I 选项进行整数比较。 不是每个人都会使用您正在使用的工具来测试您的代码。因此,如果您可以使用可执行文件的原始输出来更新您的问题,那也会有所帮助。 @Squashman 很抱歉我没有想到那个壁球手,我也用原始输出示例编辑了我的帖子。 【参考方案1】:我自己想出了如何转换时间时:分:秒。
我创建了这个解决方案,希望其他人使用我的代码并发现它有帮助。
SET STRING=08:09:01
set count=0
for %%a in (%STRING::= %) do set /a count+=1
set loopvar=1
:repeat
for /f "tokens=%loopvar% delims=:" %%a in ("%STRING%") do (
if /I %count%==4 (
if /I %loopvar%==1 (set days_output=%%a && echo Count we are on Days %%a)
if /I %loopvar%==2 (set hours_output=%%a && echo Count we are on Hours %%a)
if /I %loopvar%==3 (set mins_output=%%a && echo Count we are on Mins %%a)
if /I %loopvar%==4 (set secs_output=%%a && echo Count we are on Seconds %%a)
)
if /I %count%==3 (
if /I %loopvar%==1 (set hours_output=%%a && echo Count we are on Hours %%a)
if /I %loopvar%==2 (set mins_output=%%a && echo Count we are on Mins %%a)
if /I %loopvar%==3 (set secs_output=%%a && echo Count we are on Seconds %%a)
)
if /I %count%==2 (
if /I %loopvar%==1 (set mins_output=%%a && echo Count we are on Mins %%a)
if /I %loopvar%==2 (set secs_output=%%a && echo Count we are on Seconds %%a)
)
if /I %count%==1 (
if /I %loopvar%==1 (set secs_output=%%a && echo Count we are on Seconds %%a)
)
)
if %loopvar% gtr %count% (goto :done) else (set /a loopvar=%loopvar%+1 && goto :repeat)
:done
if defined days_output (goto :days_defined) else (goto :days_undefined)
:days_defined
if [%days_output:~0,1%]==[0] (
set days_output=%days_output:~1,1% * 86400
) else (set days_output=%days_output% * 86400)
:days_undefined
if defined hours_output (goto :hours_defined) else (goto :hours_undefined)
:hours_defined
if [%hours_output:~0,1%]==[0] (
set hours_output=%hours_output:~1,1% * 3600
) else (set hours_output=%hours_output% * 3600)
:hours_undefined
if defined mins_output (goto :mins_defined) else (goto :mins_undefined)
:mins_defined
if [%mins_output:~0,1%]==[0] (
set mins_output=%mins_output:~1,1% * 60
) else (set mins_output=%mins_output% * 60)
:mins_undefined
if defined secs_output (goto :secs_defined) else (goto :secs_undefined)
:secs_defined
if [%secs_output:~0,1%]==[0] (
set secs_output=%secs_output:~1,1%
)
:secs_undefined
SET /A time_secs=!days_output!+!hours_output!+!mins_output!+!secs_output!
echo Seconds !time_secs!
pause
【讨论】:
现在尝试将其用作您的字符串SET STRING=08:09:01
并重新测试您的代码。
是的,我现在正在修复我明白你的意思@Squashman
@Squashman 完成:D!!!
处理前导零的更简单的方法是使用简单的数学。 set /a hours_output=1%hours_output% %% 100 * 3600
持续时间永远不会超过 3 个元素。它总是以 HH:MM:SS 的形式返回。因此,如果超过一天零一小时,则为 25:00:00。以上是关于批处理文件 HH:MM:SS 转换为秒 Youtube-DL get-duration的主要内容,如果未能解决你的问题,请参考以下文章
仅在 javascript 中将 HH:MM:SS 字符串转换为秒
Redshift:将 HH:MM:SS 格式的字符串字段转换为秒和向后