Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/173: Рейтинг темы: голосов - 173, средняя оценка - 4.58
Gezerg
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
1

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

07.01.2013, 10:02. Просмотров 35725. Ответов 15
Метки нет (Все метки)

Всем привет!
Сразу говорю в 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 10:02
Ответы с готовыми решениями:

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

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

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

Можно ли присвоить значение переменной из файла
Дело в том что сортировка функции random считает числа символами, а можно ли сделать так set /a...

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

15
Eva Rosalene
Ladybug
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,196
Завершенные тесты: 2
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
Gezerg
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
Eva Rosalene
Ladybug
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,196
Завершенные тесты: 2
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!
)
1
07.01.2013, 13:43
Gezerg
4 / 4 / 2
Регистрация: 01.12.2012
Сообщений: 39
07.01.2013, 13:55  [ТС] 5
Огромное спасибо))) Всё получилось!
0
Smitis
1631 / 340 / 41
Регистрация: 15.10.2012
Сообщений: 531
07.01.2013, 14:32 6
Цитата Сообщение от FraidZZ Посмотреть сообщение
Потому что программисты винды такие программисты.
"Переменные" в командных файлах это не те переменные, как это понимается в других языках программирования. По сути - это _макроподстановки_. При построчной интерпретации, cmd считывает новую строку, раскрывает переменные, выполняет. Отсюда всякие удваивания, утраивания и т.д. знаков процента.
Фокус в том, что код в скобках () указывает cmd обработать не просто одну строку, а блок текста, возможно, состоящий из нескольких строк. Подстановка осуществляется, естественно, один раз.
1
Eva Rosalene
Ladybug
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,196
Завершенные тесты: 2
07.01.2013, 14:37 7
Цитата Сообщение от Smitis Посмотреть сообщение
Подстановка осуществляется, естественно, один раз.
В самой строке, я это знаю. Но всё равно восхищаюсь ими, так как рациональнее было бы заменять это непосредственно при выполнении команды. Впрочем, setlocal enabledelayedexpansion всё решает
0
stealzy
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 6
03.02.2016, 16:32 8
А как быть если присвоить нужно из первой строки вывода?
Например вывод команды rasdial без параметров:
Код
Связь с
MyProvider
Команда успешно выполнена.
или
Код
Отсутствуют подключения
Команда успешно выполнена.
Хотелось бы получать слова "Связь" или "Отсутствуют" в переменную.
0
ComSpec
3419 / 1962 / 630
Регистрация: 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
Dragokas
Эксперт WindowsАвтор FAQ
17127 / 7181 / 864
Регистрация: 25.12.2011
Сообщений: 10,971
Записей в блоге: 16
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
legendik
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
Dragokas
Эксперт WindowsАвтор FAQ
17127 / 7181 / 864
Регистрация: 25.12.2011
Сообщений: 10,971
Записей в блоге: 16
15.04.2017, 14:23 12
legendik, для C++ уверен это неверный способ. Вы передаёте набор цифр как строку.
Правильный вариант уже был дан FraidZZ. Не поднимайте старые темы.
0
legendik
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
Dragokas
Эксперт WindowsАвтор FAQ
17127 / 7181 / 864
Регистрация: 25.12.2011
Сообщений: 10,971
Записей в блоге: 16
10.05.2017, 17:54 14
Ну если только какая-то специфическая программа.
А для программы вида:
Цитата Сообщение от Gezerg Посмотреть сообщение
которая ищет максимальное число из 5 введенных.
можно сразу говорить о том, что её писал криворукий программист.

Вообще, во всех случаях читайте хелп на программу.
0
serega12163
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 2
02.10.2019, 16:41 15
а если два результата выводит , то как присвоить каждому переменную?
0
FlasherX
1988 / 944 / 371
Регистрация: 06.06.2017
Сообщений: 3,290
02.10.2019, 16:49 16
Подклеивать счётчик к имени переменной.
0
02.10.2019, 16:49
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2019, 16:49

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.