В батниках внешние программы, могут напрямую записать только результат в переменную %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
)
Символ переноса строки в батниках, нельзя поместить в строку никаким (не читерным) образом.
Дальше идут еще более извращенные костыльные способы через файл, но позвольте я их избегу.
Если вам это действительно жизненно необходимо, то могу дать консультацию и даже помочь с написанием батника. Просто написание батников с обходом всех костылей это искусство которому нужно учиться годами(Если вообще нужно учится :-) ).