Назад | Перейти на главную страницу

вызвать командный файл и запустить, используя его собственный путь / каталог

У меня есть командные файлы, которые вызывают другие командные файлы, например:

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 включает в себя косую черту в конце.) Это укажет командному файлу запустить исполняемый файл из текущего местоположения командного файла.