¿Cuál es el directorio actual en un archivo por lotes?


510

Quiero crear algunos archivos por lotes para automatizar un programa.

Mi pregunta es cuando creo el archivo por lotes, ¿cuál es el directorio actual? ¿Es el directorio donde se encuentra el archivo o es el mismo directorio que aparece en el símbolo del sistema, o algo más?

Respuestas:


1026

Desde dentro de su archivo por lotes:

  • %cd%se refiere al directorio de trabajo actual (variable)
  • %~dp0 se refiere a la ruta completa al directorio del archivo por lotes (estático)
  • %~dpnx0y %~f0ambos se refieren a la ruta completa al directorio por lotes y al nombre del archivo (estático).

Ver también: ¿Qué significa% ~ dp0 y cómo funciona?


55
@ Јοеу - %0podría dar el nombre de la subrutina actual, pero %~dp0será siempre la ruta completa al archivo por lotes de ejecución.
dbenham

77
En realidad, parece que% ~ dp0 proporciona la ruta completa al directorio en el que se encuentra el archivo por lotes en ejecución.% ~ Dpnx0 (que es equivalente a% ~ f0) proporciona la ruta completa al archivo por lotes. Ver robvanderwoude.com/parameters.php para más detalles.
deadlydog

66
Vea también buenas respuestas detalladas de una pregunta similar: Obtenga la lista de argumentos pasados ​​en el script por lotes de Windows (.bat)
olibre

1
Desafortunadamente, cuando se ejecuta como un proceso desde .net% ~ dp0 es el directorio de trabajo, no el directorio de archivos por lotes, lo descubrí por las malas.
Trampster

3
Como un ejemplo más explícito, al hacer clic con el botón derecho en un .cmdarchivo y ejecutarlo como administrador, %cd%da C:\WINDOWS\system32y %~dp0da al directorio del archivo por lotes con una barra diagonal final.
icc97

25

Por lo general, es el directorio desde el que se inicia el archivo por lotes, pero si inicia el archivo por lotes desde un acceso directo, se podría proporcionar un directorio de inicio diferente. Además, cuando está en cmd, y su directorio actual es c:\dir3, aún puede iniciar el archivo por lotes utilizando, c:\dir1\dir2\batch.baten cuyo caso, el directorio actual será c:\dir3.


11

En un archivo por lotes,% cd% es el comando más utilizado para el directorio actual, aunque puede establecer su propia variable:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Digamos que desea abrir Myprog.exe. Si estuviera en la misma carpeta, usaría el comando:

start %mypath%\Myprog.exe

Eso abriría Myprog desde la carpeta actual.

La otra opción es hacer un directorio en C: llamado AutomatePrograms. Luego, transfiere sus archivos a esa carpeta y luego puede abrirlos con el siguiente comando:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
Como se señaló en la respuesta superior aquí, %cd%es variable, por lo que ejecutar el archivo por lotes desde el Explorador de Windows como administrador le dará lo C:\WINDOWS\system32que casi seguro no es lo que desea. %~dp0Es más consistente.
icc97

6

Digamos que estaba abriendo un archivo en su directorio actual. El comando sería:

 start %cd%\filename.filetype

Espero haber respondido tu pregunta.


5

Es el directorio desde donde ejecuta el comando para ejecutar su archivo por lotes.

Como se menciona en las respuestas anteriores, puede agregar el siguiente comando a su script para verificar:

> set current_dir=%cd%
> echo %current_dir%  

4

Es el directorio desde donde inicia el archivo por lotes. Por ejemplo, si su lote está dentro c:\dir1\dir2y usted lo hace cd c:\dir3, entonces ejecute el lote, el directorio actual estará c:\dir3.


0

Solo mis 2 centavos. El siguiente comando falla si se llama desde un archivo por lotes (Windows 7) colocado en pendrive:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Pero esto hace el trabajo:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

Este es el interruptor que estaba buscando para determinar la ruta del directorio principal de mi archivo bat sin ese nombre de archivo por lotes:%~dp0
Ammar Mohammad
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.