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

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?

preguntado el 11 de diciembre de 10 a las 21:12

9 Respuestas

Desde dentro de su archivo por lotes:

  • %cd% se refiere a directorio de trabajo actual (variable)
  • %~dp0 se refiere a la ruta completa al directorio del archivo por lotes (estático)
  • %~dpnx0 y %~f0 ambos hacen referencia 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?

Respondido el 20 de junio de 20 a las 10:06

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

En realidad, parece que% ~ dp0 proporciona la ruta completa al directorio que el archivo por lotes en ejecución esté en.% ~ dpnx0 (que es equivalente a% ~ f0) proporciona la ruta completa al archivo por lotes. Ver robvanderwoude.com/parameters.php para más detalles. - perro mortal

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

Desafortunadamente, cuando se ejecuta como un proceso desde .net% ~ dp0 es el directorio de trabajo, no el directorio de archivos por lotes, lo encontré por las malas. - vagabundo

Como ejemplo más explícito, al hacer clic derecho en un .cmd archivo y ejecutándose como administrador, %cd% da C:\WINDOWS\system32 y %~dp0 da el directorio de archivos por lotes con una barra al final. - icc97

It generalmente 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 usando c:\dir1\dir2\batch.bat en cuyo caso, el directorio actual será c:\dir3.

Respondido el 12 de diciembre de 10 a las 01:12

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 crear un directorio en C: llamado AutomatePrograms. Luego, transfiere sus archivos a esa carpeta y luego puede abrirlos usando el siguiente comando:

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

Respondido 04 Abr '18, 01:04

Como se indica en la respuesta principal aquí, %cd% es variable, por lo que ejecutar el archivo por lotes desde el Explorador de Windows como administrador dará C:\WINDOWS\system32 que es casi seguro que no es lo que quieres. %~dp0 es más consistente. - icc97

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

 start %cd%\filename.filetype

Espero haber respondido a tu pregunta.

Respondido 08 ago 17, 19:08

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 secuencia de comandos para verificar:

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

Respondido el 20 de Septiembre de 17 a las 07:09

Es el directorio desde donde inicia el archivo por lotes. Por ejemplo, si su lote está en c:\dir1\dir2 y lo hace cd c:\dir3, luego ejecute el lote, el directorio actual será c:\dir3.

Respondido el 12 de diciembre de 10 a las 00:12

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

Respondido 18 Abr '19, 09:04

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

%__CD__% , %CD% , %=C:%

También hay otra variable dinámica %__CD__% que apunta al directorio actual pero similar %CD% tiene una barra invertida al final. Esto puede resultar útil si desea agregar archivos al directorio actual.

Con %=C:% %=D:% puede acceder al último directorio al que se accedió para la unidad correspondiente. Si la variable no está definida, no ha accedido a la unidad en la sesión actual de cmd.

Y %__APPDIR__% se expande al ejecutable que ejecuta el script actual, también conocido como cmd.exe directorio.

respondido 06 nov., 20:16

Su archivo bat debe estar en el directorio en el que está / estaba el archivo bat cuando lo abrió. Sin embargo, si desea ponerlo en un directorio diferente, puede hacerlo con cd [whatever directory]

Respondido el 25 de enero de 21 a las 13:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.