gpt4 book ai didi

windows - 我不遵循此脚本中发生的数学运算

转载 作者:可可西里 更新时间:2023-11-01 11:12:30 24 4
gpt4 key购买 nike

我知道这些循环是为了将时间变量转换为我认为的毫秒。有人可以帮我破译数学并将循环转换为分钟吗?

    for /F "tokens=1-4 delims=:.," %%a in ("!start!") do (
set /a "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)

for /F "tokens=1-4 delims=:.," %%a in ("!end!") do (
set /a "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)

我想更具体一点,我不明白 %%b %%c%%d 是从哪里来的,或者“流氓” %% 正在做。我不明白为什么变量要乘以 60+1 或 100+1。我猜它们是乘以 60 还是乘以 100,这取决于它是在小时 -> 分钟还是秒 -> 厘秒之间转换。我是否正确地遵循了这一点?

最佳答案

在指定初始 %%a for 标记后,"tokens=1-4" 选项表示将总共使用四个标记,因此 for loop 留出 %%a、%%b、%%c 和 %%d 供在该循环中使用。由于 !start! 的格式为 HH:MM:SS.cc,%%a 是 HH,%%b 是 MM,%%c 是 SS,%%d 是 cc。

%% 是一个数学运算符,用于返回两个数字的模数。 (还记得你第一次学习除法时得到的是余数而不是小数吗?模数就是余数。)

1 是一种确保数字不以 0 开头的方法,因为批处理将以 0 开头的数字视为八进制,因此根据批处理,08 和 09 不是有效数字,这会破坏事情。由于 %% 在操作顺序上胜过 +,因此数学实际上是 (1%%b %% 100)。这利用了批处理允许您从其他串联字符串创建变量这一事实。假设 %%b 是 05。1%%b %% 100 变成 105 %% 100,也就是 5。

要将时间转换为分钟而不是厘秒,请将等式从

(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100

(((%%a*60)+1%%b %% 100)

如果你想要小数部分到分钟值并且安装了 PowerShell,你可以添加这些行

for /F "delims=" %%A in ('powershell !start!/6000') do set start=%%A
for /F "delims=" %%A in ('powershell !end!/60000') do set end=%%A

这将返回十进制数字的字符串表示形式。因为 powershell 返回小数点后 11 位的值,您可能需要使用 substring删除您不想要的任何额外数字。

关于windows - 我不遵循此脚本中发生的数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com