批处理:具有更高分区的模数

时间:2018-01-04 08:00:38

标签: batch-file modulo duration

我想在批处理文件中进行持续时间计算,并且模数计算存在问题。网站上的示例总是显示一位数的计算,例如14 %% 3 - > 2.总是拒绝使用60或3600进行模数计算。所以我首先尝试了一个除法和一个modullo %% 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%

2 个答案:

答案 0 :(得分:0)

您的时间计算有点复杂,最好从小时开始 set /a并不需要变量位于%(有效,但更难以阅读)
添加了正确处理分钟/秒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% 

(注意:您可能已经知道,当时间跨越午夜时,您会得到错误的结果)

答案 1 :(得分:0)

这是一个利用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

替换行4&使用您实际需要的命令5您可能需要将%TIME%更改为%TIME:,=.%才能使其与德语Windows一起使用。