Когда вы запускаете программу с помощью cmd , в ее текущем каталоге указывается путь, который вы видите в командной строке. Я почти уверен, что рассматриваемая программа имеет некоторую зависимость от другого файла в его резидентном каталоге, который в данном случае не является его текущим каталогом, поэтому он не может найти файл. Если бы программа не существовала, вы бы увидели что-то вроде этого:
'sub\blargh.exe' is not recognized as an internal or external command,
operable program or batch file.
Вы можете доказать, что текущий каталог отличается, создав пакетный файл с именем loc.bat в папке с именем test , содержащей echo %CD% . Когда вы запустите его с test\loc из родительского каталога, вы увидите каталог командной строки, а не тот, который содержит скрипт.
Конечно, можно запускать программы в других папках, но вы должны быть осторожны с их текущей папкой. Чтобы запустить программу в определенном каталоге, вы можете использовать start /b /wait /d folder program . Если мне понадобится делать это часто, я могу создать пакетный файл, содержащий start /b /wait /d %1 %2 и поместить его в мой PATH .