¿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?

Aaron de Windt
fuente

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?

JRL
fuente
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.

GolezTrol
fuente
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"
J. Bond
fuente
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.

Hacer ping varias veces
fuente
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%  
anuj0901
fuente
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.

icyrock.com
fuente
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
Darek Adamkiewicz
fuente
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