代码之家  ›  专栏  ›  技术社区  ›  Manolo

批次:高分模

  •  0
  • Manolo  · 技术社区  · 7 年前

    我想在批处理文件中进行持续时间计算,但在模计算方面有问题。网站上的示例总是显示一位数的计算,如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%
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Stephan    7 年前

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

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

        2
  •  0
  •   Compo    7 年前

    下面是一个利用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:,=.% 使其与德国窗户配合使用。