多个变量 - 发电机

时间:2015-09-08 21:02:34

标签: variables batch-file cmd dos

我正在尝试创建一个1行代码,它将所有变量加起来很难在文本中解释,但这里只是代码的一小部分

H = hours
M = Minutes
Thr = Total Hours
Tmin= Total Minutes

Call data.bat 
Rem data.bat is all the h1,m1,h2,m2,h3,m3... info

Rem Example Data
H1=3
M1=53
H2=4
M2=20
Set num=1
:refresh
if %H%num%% GTR 0 set /a Thr=%H%num%%+%Thr%
if %M%num%% GTR 0 set /a Thr=%M%num%%+%TMin%
if %M%num%% EQU 0 Goto :total
set /a number=%number%+1
goto :refresh
:Total
set /a Total=((%Thr%*60)+%Tmin%)
set /a TotalHour=(%Total%/60)
set /a TotalMin=(-%TotalHour%*60)+%Total%
if %Totalmin% GEQ 0 if %Totalmin% LEQ 9 set Totalmin=0%Totalmin%
Echo Duration    : %TotalHour%hr %TotalMin%min

如果总计为0,则小时数没有,因为有时可能有0小时但是##的分钟 关于如何做到这一点的任何想法? 按原样运行它给我

一步一步的操作

if %h%num%% gtr 0 set /a Thr=%h%num%%+%thr%
If %h1% gtr 0 set /a thr=%h1%+%thr%
If 3 gtr 0 set /a thr=**3+%thr%
if 3 gtr 0 set /a thr=3+1

2 个答案:

答案 0 :(得分:2)

您的代码中有几点需要调整:

if !H%num%! GTR 0 set /a Thr=!H%num%!+%Thr%
  • 但是,set /a命令可以在仅给出变量名称时直接访问数组元素,因此在这种情况下不需要扩展值:

set /a Thr=H%num%+Thr
set /a number=number+1

最后一行也可以这样写:

set /a number+=1
  • 如果要检查变量是否不存在(并且不要将其与值为零的变量混淆),可以使用if defined命令:

if defined H%num% goto refresh
  • 您曾多次使用错误的变量名称:number而不是num,以及分钟计算中的Thr

这是完成之前修改后的最终代码:

@echo off

REM H = hours
REM M = Minutes
REM Thr = Total Hours
REM Tmin= Total Minutes

REM Call data.bat 
Rem data.bat is all the h1,m1,h2,m2,h3,m3... info

Rem Example Data
set H1=3
set M1=53
set H2=4
set M2=20
Set num=1
:refresh
set /a Thr=H%num%+Thr
set /a Tmin=M%num%+Tmin
set /a num=num+1
if defined M%num% Goto :refresh
:Total
set /a Total=((Thr*60)+Tmin)
set /a TotalHour=(Total/60)
set /a TotalMin=(-TotalHour*60)+Total
if %Totalmin% LEQ 9 set Totalmin=0%Totalmin%
Echo Duration    : %TotalHour%hr %TotalMin%min

输出:

Duration    : 8hr 13min

答案 1 :(得分:0)

如果您正在寻找解析时间和计算持续时间的公式,您可能会看到:Calculate Time difference in Windows batch file