Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/511: Рейтинг темы: голосов - 511, средняя оценка - 4.51
 Аватар для Gezerg
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39

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

07.01.2013, 10:02. Показов 98276. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2013, 10:02
Ответы с готовыми решениями:

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

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

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

19
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
07.01.2013, 12:19
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
 Аватар для Gezerg
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
07.01.2013, 13:35  [ТС]
Спасибо за ответ у меня получилось))
Цитата Сообщение от 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
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
07.01.2013, 13:43
Лучший ответ Сообщение было отмечено 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
 Аватар для Gezerg
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
07.01.2013, 13:55  [ТС]
Огромное спасибо))) Всё получилось!
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
07.01.2013, 14:32
Цитата Сообщение от FraidZZ Посмотреть сообщение
Потому что программисты винды такие программисты.
"Переменные" в командных файлах это не те переменные, как это понимается в других языках программирования. По сути - это _макроподстановки_. При построчной интерпретации, cmd считывает новую строку, раскрывает переменные, выполняет. Отсюда всякие удваивания, утраивания и т.д. знаков процента.
Фокус в том, что код в скобках () указывает cmd обработать не просто одну строку, а блок текста, возможно, состоящий из нескольких строк. Подстановка осуществляется, естественно, один раз.
2
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
07.01.2013, 14:37
Цитата Сообщение от Smitis Посмотреть сообщение
Подстановка осуществляется, естественно, один раз.
В самой строке, я это знаю. Но всё равно восхищаюсь ими, так как рациональнее было бы заменять это непосредственно при выполнении команды. Впрочем, setlocal enabledelayedexpansion всё решает
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
03.02.2016, 16:32
А как быть если присвоить нужно из первой строки вывода?
Например вывод команды rasdial без параметров:
Code
1
2
3
Связь с
MyProvider
Команда успешно выполнена.
или
Code
1
2
Отсутствуют подключения
Команда успешно выполнена.
Хотелось бы получать слова "Связь" или "Отсутствуют" в переменную.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
03.02.2016, 23:48
Лучший ответ Сообщение было отмечено 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
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
04.02.2016, 22:11
Или
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
FOR /F %%a IN (`maxnum.exe "1 4 2 6 4"`) DO set result=%%a
echo %result%

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

Вообще, во всех случаях читайте хелп на программу.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 2
02.10.2019, 16:41
а если два результата выводит , то как присвоить каждому переменную?
0
6962 / 2857 / 1098
Регистрация: 06.06.2017
Сообщений: 9,694
02.10.2019, 16:49
Подклеивать счётчик к имени переменной.
0
 Аватар для Electra2005
2 / 2 / 0
Регистрация: 10.01.2011
Сообщений: 85
24.12.2020, 17:02
И как сие сделать с результатом вывода api в curl?
0
6962 / 2857 / 1098
Регистрация: 06.06.2017
Сообщений: 9,694
24.12.2020, 17:44
Electra2005, какого "вывода" (ключа в параметр?) и что есть "сие"? К кому/чему вопрос? Связь какая с сабжем? Полный расклад уточнений в студию.
0
 Аватар для Electra2005
2 / 2 / 0
Регистрация: 10.01.2011
Сообщений: 85
24.12.2020, 21:09
Ну к примеру curl https://whattomine.com/coins/151.json
выдает результат в виде:
Code
1
{"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
6962 / 2857 / 1098
Регистрация: 06.06.2017
Сообщений: 9,694
24.12.2020, 21:23
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2020, 21:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru