批处理文件 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的主要内容,如果未能解决你的问题,请参考以下文章

仅将 HH:MM:SS 格式的时间转换为秒?

仅在 javascript 中将 HH:MM:SS 字符串转换为秒

Redshift:将 HH:MM:SS 格式的字符串字段转换为秒和向后

将 HH:MM:SS (hours:minutes:seconds.split seconds) 转换为秒的简单方法

ruby 将时间(HH:MM:SS)转换为秒,然后再转回

如何将数据框列传递给scala函数