2010-04-28 1 views

ответ

103

Попробуйте позвонить .exe с помощью %~dp0, например: %~dp0MyProgram.exe.

%0 содержит полный путь к названному файлу .bat.

~dp говорит, чтобы получить привод и путь, включая завершение \.

+2

+1 голос только что нашел эту ссылку в поиске Google - http://weblogs.asp.net/whaggard/archive/2005/01/28/get-directory-path-of-an-executing-batch-file. aspx – house9

+0

Хорошее объяснение, спасибо! – enderland

+12

Ответ Патрика Каффа выше работает, но не удается, если часть пути к каталогу содержит пробелы в своем имени. Чтобы обойти это, вам нужно поставить двойные кавычки вокруг вызова .exe. "% ~ dp0MyProgram.exe" –

0

кажется странным? Я не работал на окнах на некоторое время, но

вы пытались ведущий с ./

./program.exe

действительно должно быть никакой разницы? может быть, летучая мышь выполняется из контекста C: \ Windows или в какой-то момент ваша партия делает какой-либо диск в другом каталоге?

+0

Вы имели в виду. \ (То есть обратная косая черта). –

+0

Я думаю, что когда я исполняю пакет, он выполняется из другого каталога. –

+1

Возможно, мой вопрос: «Как дважды щелкнуть пакетный файл и сделать его выполненным в том же каталоге, что и он?» –

11

Я решил это, изменив рабочий каталог, используя pushd в начале сценария, и восстановление находится в конце скрипта, используя popd. Таким образом, вы всегда можете предположить, что рабочий каталог совпадает с местоположением файла bat.

pushd %~dp0 
ProgramInSameFolderAsBat.exe 
popd