Я искал такое же решение той же проблемы, и после прочтения ваших комментариев у меня возникла идея (которая не является ответом на вопрос, но для моей проблемы еще лучше).
Я не был удовлетворен cmd.exe /c mysub.cmd
, потому что он затрудняет или даже делает невозможным возвращение переменных (я не проверял) - (не могу комментировать, потому что я впервые публикую здесь:)
Вместо этого заметил, что все, что мы хотим - в конце концов - подавить стандартный вывод:
echo on
rem call "mysub.cmd" >nul
call :mysub >nul
echo %mysub_return_value%
GOTO :eof
:mysub
setlocal
set mysub_return_value="ApplePie"
endlocal & set mysub_return_value=%mysub_return_value%
GOTO :eof
Он отлично работает с помеченными подпрограммами, с подпрограммами, содержащимися в файлах .cmd, и я полагаю, что он будет работать нормально даже с вариантом cmd.exe / c (или start).
Он также имеет плюс, который мы можем оставить или отбросить, заменив >nul
на >nul 2>&1
Замечу, что ss64.com пугает дети, подобные мне, заявляют, что с вызовом "Перенаправление с & | <> также не работает должным образом" .
Этот простой тест работает, как и ожидалось. Должно быть, он думал о более сложных ситуациях.