2015-09-08 2 views
0

Я пытаюсь создать код 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 goto total, потому что могут быть моменты, когда было 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 
+0

, если вы пытаетесь установить 1 вар со значениями 2 другими переменными или показать 2 ВАР, написать его правильное число '%'. то есть. 'if% H %% num% ...' и 'set/a Thr =% H %% num% +% Thr %' вместо. каждый vars внутри 2 '%'. – Paul

+0

если 'Thr = 2 H3 = 4 Num = 3', то я хочу, чтобы я мог изменить' if% H% num %% GTR 0 set/a Thr =% H% num %% +% Thr% 'so it читает 'If 4 GTR 0 set/a THR = 4 + 2' –

+0

@Paul: OP не пытается установить 1 var со значениями 2 других vars или показать 2 vars, но получить доступ к одному _array element_:' set/a Thr =! H% num%! +% Thr% ' – Aacini

ответ

2

Есть несколько моментов в вашем код, который должен быть отрегулирован:

.

if !H%num%! GTR 0 set /a Thr=!H%num%!+%Thr% 
  • Однако set /a команда может получить непосредственный доступ к элементам массива, когда только имя переменной задается, так в этом случае не necesssary расширить значение:

,

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 
+0

Не хватает Rep прямо сейчас, но +1 Я знаю, что это говорит не только +2 –

2

вам нужно замедленное расширение:

setlocal enabledelayedexpansion 
set h1=3 
set x=1 
echo !h%x%! 

EDIT Показать, как это работает на примере в ваш комментарий:

setlocal enabledelayedexpansion 
set Thr=2 
set H3=4 
set Num=3 
    REM echo if !H%Num%! GTR 0 set /a Thr=!H%num%!+%Thr% 
    echo if !H%Num%! GTR 0 set /a Thr+=!H%num%! 
    REM if !H%Num%! GTR 0 set /a Thr=!H%num%!+%Thr% 
if !H%Num%! GTR 0 set /a Thr+=!H%num%! 
echo %Thr% 

(примечание: t он предполагал, что строки избыточны, просто для отображения, что происходит) Я использовал другой синтаксис для добавления значения к переменной; Прокомментировал ваш синтаксис. Обе версии работают одинаково.

%h%num%% 

будет интерпретироваться как (вставленное подчеркивание показать, как синтаксический анализатор групп его):

%h%_num_%% 

с %h% (вероятно) не определено (как показано ниже, как ~), %% interpreded, как беглый сингл буквальный %, в результате чего:

~_num_% 

или без заполнителей:

num% 

То же самое с замедленным ростом:

!H%Num%! 

%num% будучи 3:

!H3! 

, которая становится расширена:

4 

пользователя Джеб написал GREA т ответ на How does the Windows Command Interpreter (CMD.EXE) parse scripts? (жесткий материал, но и помогает понять, что происходит)

+0

Я хочу так' if Thr = 2 H3 = 4 Num = 3', тогда я хочу, чтобы я мог изменить 'if% H% num %% GTR 0 set/a Thr =% H% num %% +% Thr% 'поэтому он читает Если' 4 GTR 0 установить/a THR = 4 + 2' –

0

Если вы ищете формулу для синтаксического анализа времени и расчета продолжительности, вы можете посмотреть это: Calculate Time difference in Windows batch file

+0

свое время, но преобразование из hh: mm: ss.ms уже сделано просто нужно найти способ сделать% h% num %% to =% h1%, который равен числу –

+0

Вопрос не в разнице во времени, а в точности противоположная: добавьте несколько раз ... – Aacini

 Смежные вопросы

  • Нет связанных вопросов^_^