Войти

Показать полную графическую версию : [решено] Проверка изменения переменных в *.bat файле


VoinLuny
28-03-2012, 19:22
У меня есть батник в котором зациклен процесс расчетов. Мне нужно, чтобы он повторялся до тех пор, пока эти расчеты приводят к изменениям результатов (чтобы несколько сгладить О_о впечатление от моего описания скажу, что пишу в батнике алгоритм кластеризации по методу k-means). Собственно вопрос: Как мне проверить происходит ли изменение переменной x после расчета?
Т.е. Как сравнить переменную до и после? Сложность в том, что желательно делать это не по одной переменной, а группами или сразу все, т.к. переменных много. Помогите пожалуйста.

kiripanda
28-03-2012, 19:41
если много, то наверно проще всего вывести все в файл,
после расчета – в другой файл, и сравнить

VoinLuny
28-03-2012, 19:43
Дело в том, что в зависимости от того, будет меняться или нет, батник должен либо продолжать вычисления либо завершиться. В этом то и проблема :(

ну и потом как много? 9 штук. Просто сравнивать их по одной ну уж очень неудобно. И не совсем понятно как. Я додумался только после каждого круга расчетов переменную переобозначать и сравнивать старое обозначение с новым...

Foreigner
28-03-2012, 20:40
VoinLuny,
Все равно при каждой итерации потребуется создавать проверочную переменную. Например:

@echo off
setlocal

set "a=1"
set "b=2"
set "c=3"

set "test=%a%%b%%c%"

:loop
set /p a="Enter value or skip: "
set /p b="Enter value or skip: "
set /p с="Enter value or skip: "

if "%test%"=="%a%%b%%c%" (goto:eof) else (set "test=%a%%b%%c%" && goto:loop)

Вместо "set /p" какие-то расчеты.

kiripanda
28-03-2012, 20:45
:loop
set > 0.tmp
rem вычисления
set > 1.tmp
fc 0.tmp 1.tmp >nul ||goto :loop

VoinLuny
28-03-2012, 21:03
Foreigner, не могли бы Вы пояснить, set "test=%a%%b%%c%" » что делает? Что она задает переменную тест со значением abc я понимаю, но что она из себя представляет в блоке IF? Ведь мы её и так задаем abc а тут if "%test%"=="%a%%b%%c%" » идет проверка этого, следовательно всегда будет положительный результат, разве нет?


kiripanda, тут тоже вопрос.
set > 0.tmp »
в этом временном файле будут какие данные? с чем будут сравниваться результаты вычислений? В него вносить старые данные переменных?

kiripanda
28-03-2012, 21:25
какие данные? Все.
если назовёшь свои переменные my_var_*
то можно отфильтровать set my_var_ > 0.tmp

VoinLuny
28-03-2012, 21:32
а если в процессе исполнения программы все эти переменные через echo у меня выводятся на экран, то можно их оттуда записать, так?

Foreigner
28-03-2012, 21:39
идет проверка этого, следовательно всегда будет положительный результат, разве нет? »
Нет. Переменная test изменяется до того как переменные a, b и c будут вновь обработаны.

kiripanda
28-03-2012, 21:41
через echo у меня выводятся на экран
в виде %переменных% они существуют? — можно

VoinLuny
28-03-2012, 21:43
Спасибо, в этом вопросе вроде разобрался!
Осталось конечно ещё дополна, но их описать в режиме онлайн будет сложно. Точно не сейчас. Доброй ночи!




© OSzone.net 2001-2012