Присвоение значения переменной в DOS'е?

Как в .bat файле присвоить переменной результат выполнения внешней программы?

По аналогии bash'а: variable=`grep --count value filename`.
  • Вопрос задан
  • 9953 просмотра
Пригласить эксперта
Ответы на вопрос 3
Fastto
@Fastto
Присвоение осуществляется оператором SET

SET set is_finded=1
echo !is_finded!

выдаст 1

А вот именно внешней программы… так сразу и не придумать, но можно сделать так например:
1. Записать результат в файл
2. прочитать файл через FOR и первую строку SETом присвоить переменной
Ответ написан
Комментировать
@korvindest
В батниках внешние программы, могут напрямую записать только результат в переменную %ErrorLevel% это результат работы программы int main(...){ return 0;}.

Не прямых способов больше, самый прямой из них это обработка вывода(stdout) программы циклом for. Делается так:

for /F «tokens=*» %%f in ('myprogram.exe') DO set myVar=%%f

Но этот вариант годится, только в том случае, если все что нужно умещается в одну строку.
Если программа выдает много строк, то в цикле надо ставить обработку и учитывать локальность изменений с переменной. (В батниках, любые действия по изменению переменных произведенные внутри цикла, не выходят за пределы цикла)
Обходиться это примерно так:

for /F «tokens=*» %%f in ('myprogram.exe') DO (
call set myVar=%myVar%%%f
)
Символ переноса строки в батниках, нельзя поместить в строку никаким (не читерным) образом.

Дальше идут еще более извращенные костыльные способы через файл, но позвольте я их избегу.
Если вам это действительно жизненно необходимо, то могу дать консультацию и даже помочь с написанием батника. Просто написание батников с обходом всех костылей это искусство которому нужно учиться годами(Если вообще нужно учится :-) ).
Ответ написан
Погуглите на тему «errorlevel».
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы