4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
1

Присвоить переменной результат выполнения программы

07.01.2013, 10:02. Показов 86690. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Сразу говорю в bat сценариях я новичок))
У меня есть программа (написана на с++) maxnum.exe, которая ищет максимальное число из 5 введенных.
Я создал батник и записал в него такой код:
Bash
1
2
3
@echo off
    maxnum.exe 1 4 2 6 4
timeout /t 30
Запускаю свой батник и в командной строке выводится число 6. Так и должно быть. Но мне нужно чтоб это максимальное число записалось в переменную для дальнейшего использования.
Думал сделать так:
Bash
1
2
3
4
@echo off
    set result=maxnum.exe 1 4 2 6 4
    echo %result%
timeout /t 30
Но ничего не получается((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2013, 10:02
Ответы с готовыми решениями:

Присвоить переменной в качестве значения строку, выводимую в результате выполнения программы
День добрый, есть у меня вот такая заготовка скрипта В нем я через imageMagic вытягиваю размер...

Переменная вместо строки в команде FIND -> присвоить результат переменной
Доброго времени суток, уважаемые форумчане! Помогите, пжт, дописать bat-ник. Задача: на ежедневной...

Присвоить вывод программы переменной
Решил спросить здесь: Как сделать что бы выдаваемое значение zenity присваивалась переменной?

Как присвоить определенному полю БД значение переменной, вычесленной в ходе выполнения программы
У меня проблема с Fox Pro, подскажите пожалуйста как присвоить определенному полю базы данных...

19
Модератор
Эксперт JS
4952 / 2006 / 387
Регистрация: 06.01.2013
Сообщений: 4,697
07.01.2013, 12:19 2
Bash
1
2
3
4
FOR /F "usebackq" %%a IN (`maxnum.exe 1 4 2 6 4`) DO (
 set result=%%a
)
echo %result%
И всё

Добавлено через 1 минуту
А почему сам maxnum не переделаешь под свои нужды?
0
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
07.01.2013, 13:35  [ТС] 3
Спасибо за ответ у меня получилось))
Цитата Сообщение от FraidZZ Посмотреть сообщение
А почему сам maxnum не переделаешь под свои нужды?
Потому что у мне было дано такое задание))
А почему когда пишешь вот так:
Bash
1
2
3
4
5
@echo off
FOR /F "usebackq" %%a IN (`maxnum.exe 1 4 2 6 4`) DO (
 set result=%%a
echo %result%
)
то в командной строке выводится "Режим вывода команд на экран (ECHO) отключён."?
0
Модератор
Эксперт JS
4952 / 2006 / 387
Регистрация: 06.01.2013
Сообщений: 4,697
07.01.2013, 13:43 4
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Потому что программисты винды такие программисты. Если ты используешь переменную ВНУТРИ цикла или оператора "иф", то она берётся такой, как она была ПРИ ВХОДЕ В ЦИКЛ, а т.к. до цикла её не было, то вместо неё подставляется пустота и получается просто echo. Это называется "связывание времени подстановки" или както так.
Чтобы это не мешало, надо либо использовать переменные за циклом, или в начало батника впихнуть строку
Bash
1
"setlocal enabledelayedexpansion"
а вместо %result% использовать !result!:
Bash
1
2
3
4
5
6
@echo off
setlocal enabledelayedexpansion
FOR /F "usebackq" %%a IN (`maxnum.exe 1 4 2 6 4`) DO (
 set result=%%a
echo !result!
)
2
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
07.01.2013, 13:55  [ТС] 5
Огромное спасибо))) Всё получилось!
0
1744 / 349 / 41
Регистрация: 15.10.2012
Сообщений: 548
07.01.2013, 14:32 6
Цитата Сообщение от FraidZZ Посмотреть сообщение
Потому что программисты винды такие программисты.
"Переменные" в командных файлах это не те переменные, как это понимается в других языках программирования. По сути - это _макроподстановки_. При построчной интерпретации, cmd считывает новую строку, раскрывает переменные, выполняет. Отсюда всякие удваивания, утраивания и т.д. знаков процента.
Фокус в том, что код в скобках () указывает cmd обработать не просто одну строку, а блок текста, возможно, состоящий из нескольких строк. Подстановка осуществляется, естественно, один раз.
2
Модератор
Эксперт JS
4952 / 2006 / 387
Регистрация: 06.01.2013
Сообщений: 4,697
07.01.2013, 14:37 7
Цитата Сообщение от Smitis Посмотреть сообщение
Подстановка осуществляется, естественно, один раз.
В самой строке, я это знаю. Но всё равно восхищаюсь ими, так как рациональнее было бы заменять это непосредственно при выполнении команды. Впрочем, setlocal enabledelayedexpansion всё решает
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
03.02.2016, 16:32 8
А как быть если присвоить нужно из первой строки вывода?
Например вывод команды rasdial без параметров:
Код
Связь с
MyProvider
Команда успешно выполнена.
или
Код
Отсутствуют подключения
Команда успешно выполнена.
Хотелось бы получать слова "Связь" или "Отсутствуют" в переменную.
0
3455 / 1993 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
03.02.2016, 23:48 9
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
@echo off
 
for /f %%i in ('"rasdial| (set/p x=& call echo %%x%%)"') do set var=%%i
 
echo.%var%
 
pause>nul
2
Эксперт WindowsАвтор FAQ
18066 / 7669 / 891
Регистрация: 25.12.2011
Сообщений: 11,438
Записей в блоге: 17
04.02.2016, 22:11 10
Или
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
SetLocal EnableExtensions
 
for /f %%i in ('rasdial') do set "var=%%i"& goto fin
:fin
 
echo.%var%
 
pause>nul
0
6 / 1 / 0
Регистрация: 24.12.2013
Сообщений: 5
14.04.2017, 15:11 11
FOR /F %%a IN (`maxnum.exe "1 4 2 6 4"`) DO set result=%%a
echo %result%

Параметры передаются через двойные ковычки.
0
Эксперт WindowsАвтор FAQ
18066 / 7669 / 891
Регистрация: 25.12.2011
Сообщений: 11,438
Записей в блоге: 17
15.04.2017, 14:23 12
legendik, для C++ уверен это неверный способ. Вы передаёте набор цифр как строку.
Правильный вариант уже был дан FraidZZ. Не поднимайте старые темы.
0
6 / 1 / 0
Регистрация: 24.12.2013
Сообщений: 5
10.05.2017, 09:13 13
Dragokas
к сожалению от FraidZZ не работает.
Есть программа которая в данном случае это maxnum.exe которая должна принимать параметры, передать параметры
в файле получилось только таким способом maxnum.exe "1 4 2 6 4"
Это не теория. Это практика с которой столкнулся.
0
Эксперт WindowsАвтор FAQ
18066 / 7669 / 891
Регистрация: 25.12.2011
Сообщений: 11,438
Записей в блоге: 17
10.05.2017, 17:54 14
Ну если только какая-то специфическая программа.
А для программы вида:
Цитата Сообщение от Gezerg Посмотреть сообщение
которая ищет максимальное число из 5 введенных.
можно сразу говорить о том, что её писал криворукий программист.

Вообще, во всех случаях читайте хелп на программу.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 2
02.10.2019, 16:41 15
а если два результата выводит , то как присвоить каждому переменную?
0
5900 / 2596 / 1023
Регистрация: 06.06.2017
Сообщений: 8,861
02.10.2019, 16:49 16
Подклеивать счётчик к имени переменной.
0
1 / 1 / 0
Регистрация: 10.01.2011
Сообщений: 82
24.12.2020, 17:02 17
И как сие сделать с результатом вывода api в curl?
0
5900 / 2596 / 1023
Регистрация: 06.06.2017
Сообщений: 8,861
24.12.2020, 17:44 18
Electra2005, какого "вывода" (ключа в параметр?) и что есть "сие"? К кому/чему вопрос? Связь какая с сабжем? Полный расклад уточнений в студию.
0
1 / 1 / 0
Регистрация: 10.01.2011
Сообщений: 82
24.12.2020, 21:09 19
Ну к примеру curl https://whattomine.com/coins/151.json
выдает результат в виде:
Код
{"id":151,"name":"Ethereum","tag":"ETH","algorithm":"Ethash","block_time":"13.3071","block_reward":2.74858076361654,"block_reward24":3.22496681451538,"block_reward3":2.965810887965993,"block_reward7":2.8386284391408227,"last_block":11517747,"difficulty":3.649228010774094e+15,"difficulty24":3.7136899810067e+15,"difficulty3":3.685968611318847e+15,"difficulty7":3.648970091276806e+15,"nethash":274231651582545,"exchange_rate":0.025368,"exchange_rate24":0.025274943977591,"exchange_rate3":0.026044026760091,"exchange_rate7":0.02703991464321363,"exchange_rate_vol":8741.27746054,"exchange_rate_curr":"BTC","market_cap":"$67,501,322,484","pool_fee":"0.000000","estimated_rewards":"0.005659","btc_revenue":"0.00014356","revenue":"$3.35","cost":"$1.01","profit":"$2.34","status":"Active","lagging":false,"testing":false,"listed":true,"timestamp":1608832106}
Ну жно выловить значение 151 из поля id и занести в переменную.
0
5900 / 2596 / 1023
Регистрация: 06.06.2017
Сообщений: 8,861
24.12.2020, 21:23 20
Windows Batch file
1
@for /f "tokens=2 delims=:," %%i in ('2^>nul curl https://whattomine.com/coins/151.json') do @set n=%%i
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2020, 21:23
Помогаю со студенческими работами здесь

Переменной d присвоить результат деления первого числа на второе, а переменной f - результат деления второго на первое
Даны два целых числа. Переменной d присвоить результат деления первого числа на второе число, а...

Переменно присвоить результат выполнения SQL скрипта
форумчане, с bash только начинаю знакомится. подскажите, в bash переменной могу присвоить...

Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить....

Результат запроса присвоить переменной
Как? Извиняюсь сразу за ламерский вопрос но надо достаточно срочно. Селектом выбираем одно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru