批次:具有更高分度的模数

Batch: Modulo with higher divisions

我想在批处理文件中进行持续时间计算,但模计算有问题。网站上的示例总是显示一位数计算,如 14%%3 --> 2。用 60 或 3600 进行模计算总是被拒绝。所以我首先尝试对答案变量进行除法和模数 %%1 。但这也遭到否认。有人知道如何处理这种情况吗?

这是代码片段:

set endzeit=Ende: %date% %time:~-11,2%:%time:~-8,2%:%time:~-5,2%
set /a ende=(%time:~-11,2%)*3600 + (%time:~-8,2%)*60 + (%time:~-5,2%)
set /a dauer=%ende%-%anfang%
set /a dauer_r=(%dauer%/3600)%%1
set /a dauer_sek=(%dauer_std_r%/60)%%1
set /a dauer_min=(%dauer_std_r%-%dauer_sek%)/60
set /a dauer_std=(%dauer%-%dauer_r%)/3600
echo %dauer_std%:%dauer_min%:%dauer_sek%

你的时间计算有点复杂,最好从小时数开​​始。
set /a 不需要变量在 % 中(有效,但更难阅读)
添加代码以正确处理 minutes/seconds 0809(通过在开头添加 1 并减去 100)

setlocal
set anfang=20000
set endzeit=Ende: %date% %time:~-11,2%:%time:~-8,2%:%time:~-5,2%
set /a ende=(%time:~-11,2%)*3600 + (1%time:~-8,2% - 100)*60 + (1%time:~-5,2% - 100)
set /a dauer=ende - anfang

set /a dauer_std=dauer / 3600
set /a dauer_min=(dauer - dauer_std*3600) / 60
set /a dauer_sek=dauer - dauer_std*3600 - dauer_min*60
REM shortcut: set /a dauer_sek=dauer %%60

echo %dauer_std%:%dauer_min%:%dauer_sek% 

(注意:你可能知道,当时间过了午夜时,你会得到错误的结果)

这是一个利用 PowerShell 计算持续时间的示例。

@Echo Off
Echo Gestartet
Set "anfang=%DATE% %TIME%"
Echo Warten
Timeout 28 /NoBreak>Nul
Echo Fertig
Set "endzeit=%DATE% %TIME%"
Echo Berechnen
For /F "Delims=" %%A In ('PowerShell -C^
 "([DateTime]'%endzeit%'-[DateTime]'%anfang%').ToString()"') Do Echo %%~nA
Pause

将行 45 替换为您实际需要的命令
您可能需要将 %TIME% 更改为 %TIME:,=.% 使其与德语 Windows.

一起使用