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

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

07.01.2013, 10:02. Показов 98551. Ответов 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
6968 / 2862 / 1100
Регистрация: 06.06.2017
Сообщений: 9,711
02.10.2019, 16:49
Подклеивать счётчик к имени переменной.
0
 Аватар для Electra2005
2 / 2 / 0
Регистрация: 10.01.2011
Сообщений: 85
24.12.2020, 17:02
И как сие сделать с результатом вывода api в curl?
0
6968 / 2862 / 1100
Регистрация: 06.06.2017
Сообщений: 9,711
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
6968 / 2862 / 1100
Регистрация: 06.06.2017
Сообщений: 9,711
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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru