Obtener el directorio actual del archivo por lotes

En primer lugar, vi este tema, pero no pude entender eso.

Pregunta:

Hay un archivo por lotes en D:\path\to\file.bat con el siguiente contenido:

 echo %cd% pause 

La salida es:

 C:\ 

Debe ser D:\path\to

¿Qué estoy haciendo mal?

La variable de solo lectura del sistema %CD% conserva la ruta de la persona que llama del lote, no la ubicación del archivo por lotes.

Puede obtener el nombre del script por lotes como escrito por el usuario con %0 (por ejemplo, scripts\mybatch.bat ). Se pueden aplicar extensiones de parámetros a esto, de modo que %~dp0 devolverá la unidad y la ruta a la secuencia de comandos por lotes (por ejemplo, W:\scripts\ ) y %~f0 devolverá la ruta completa (por ejemplo, W:\scripts\mybatch.cmd ).

Puede hacer referencia a otros archivos en la misma carpeta que el script por lotes usando esta syntax:

 CALL %0\..\SecondBatch.cmd 

Esto incluso se puede usar en una subrutina, Echo %0 dará la etiqueta de llamada pero, echo "%~nx0" le dará el nombre de archivo del script por lotes.

Cuando la variable %0 se expande, el resultado se incluye entre comillas.

Más sobre los parámetros de lotes .

Muy simple:

 setlocal cd /d %~dp0 File.exe 

Dentro de tu archivo .bat:

 set mypath=%cd% 

Ahora puede usar la variable %mypath% para hacer referencia a la ruta del archivo .bat . Para verificar que la ruta es correcta:

 @echo %mypath% 

Por ejemplo, un archivo llamado DIR.bat con los siguientes contenidos

 set mypath=%cd% @echo %mypath% Pause 

ejecutar desde el directorio g:\test\bat hará eco de esa ruta en la ventana de comandos de DOS.