2010-04-28 19 views

Respuesta

103

Intente llamar al .exe con %~dp0, así: %~dp0MyProgram.exe.

%0 contiene la ruta completa al archivo llamado .bat.

~dp dice obtener la unidad y la ruta, incluida la última \.

+2

+1 voto acaba de encontrar este enlace en la búsqueda de google - http://weblogs.asp.net/whaggard/archive/2005/01/28/get-directory-path-of-an-executing-batch-file. aspx – house9

+0

¡Buena explicación, gracias! – enderland

+12

La respuesta de Patrick Cuff anterior funciona, pero falla si parte de la ruta del directorio tiene espacios en su nombre. Para evitar esto, debe poner comillas dobles alrededor de la llamada .exe. "% ~ dp0MyProgram.exe" –

0

parece impar? No he trabajado en las ventanas por algún tiempo, pero

tenía que tratar con un líder ./

./program.exe

realmente debería haber ninguna diferencia? tal vez el murciélago se está ejecutando desde el contexto de C: \ Windows o ¿tu lote hizo algún CD a otro dir en algún momento?

+0

Quiere decir. \ (Es decir, barra invertida). –

+0

Creo que cuando ejecuto el lote, se está ejecutando desde otro directorio. –

+1

Tal vez mi pregunta es "¿Cómo hacer doble clic en un archivo por lotes y hacer que se ejecute en el mismo directorio que está?" –

11

Lo resolví cambiando el directorio de trabajo usando pushd al comienzo del script y la restauración está al final del script usando popd. De esta forma siempre puedes asumir que el directorio de trabajo es el mismo que la ubicación del archivo bat.

pushd %~dp0 
ProgramInSameFolderAsBat.exe 
popd 
Cuestiones relacionadas