批次:具有更高分度的模数
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 08
和 09
(通过在开头添加 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
将行 4
和 5
替换为您实际需要的命令
您可能需要将 %TIME%
更改为 %TIME:,=.%
使其与德语 Windows.
一起使用
我想在批处理文件中进行持续时间计算,但模计算有问题。网站上的示例总是显示一位数计算,如 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 08
和 09
(通过在开头添加 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
将行 4
和 5
替换为您实际需要的命令
您可能需要将 %TIME%
更改为 %TIME:,=.%
使其与德语 Windows.