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

问题描述 投票:0回答:2

我想在批处理文件中进行持续时间计算,并且模数计算存在问题。网站上的示例总是显示一位数的计算,如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%
batch-file modulo duration
2个回答
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% 

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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.