У меня есть командные файлы, которые вызывают другие командные файлы, например:
e:\foo\master.bat
имеет содержание:
call e:\bar\run1.bat
и e:\bar\run1.bat
имеет содержание
app1.exe
проблема в том, что когда я запускаю master.bat
app1.exe
не будет выполнен, потому что он будет ожидать, что он будет в e:\foo
каталог вместо того, чтобы быть в e:\bar
каталог
Вам немного непонятно, где находится app1.exe.
Если он разделяет папку с run1.bat, измените run1.bat
либо
@Echo off
Pushd "%~dp0"
app1.exe
popd
или
@Echo off
"%~dp0app1.exe"
%0
относится к запущенной в данный момент партии и модификатору ~dp
возвращает диск и путь (с обратной косой чертой в конце).
Ответ на ваш вопрос можно получить из аналогичного вопроса о переполнении стека.
Каков текущий каталог в пакетном файле?
Используя упомянутые здесь переменные, вы можете обновить run1.bat, чтобы вызвать app1.exe со следующей строкой: %~dp0app1.exe
. (Переменная% ~ dp0 включает в себя косую черту в конце.) Это укажет командному файлу запустить исполняемый файл из текущего местоположения командного файла.