Obtener el directorio que contiene el script por lotes ejecutado actualmente

30

Lo uso %0en el archivo por lotes para obtener el directorio que contiene el archivo por lotes pero el resultado es: -

c:\folder1\folder2\batch.bat

Solo quiero un directorio, sin nombre de archivo por lotes, como este: -

c:\folder1\folder2\

¿Cómo puedo hacerlo? Tal vez debería filtrar el camino. En caso afirmativo, ¿cómo puedo hacerlo?

Mohammad AL-Rawabdeh
fuente
Cuando use% 0 en un archivo por lotes como parte de una línea de comando, debe usar% 0 \ .. \ RestOfStuff. El punto doble lo devuelve más allá del nombre del archivo.
John Gardeniers
¡El directorio que contiene el script ejecutado actualmente no es necesariamente el mismo que el directorio de trabajo (CD) actual! Edité la pregunta en consecuencia, ahora evita el término de "directorio actual".
chiccodoro

Respuestas:

52
%~p0

Solo devolverá el camino.

%~dp0

Devolverá la unidad + ruta.

Se puede encontrar más información sobre el tema en el sitio de Microsoft .

La información sobre esta sintaxis también se puede encontrar en la ayuda para el comando for ejecutando for /?en un sistema operativo Windows.

Bart De Vos
fuente
2
Como otra fuente de referencia, la misma lista de sustituciones variables también se muestra cuando escribefor /?
Kevin
% ~ dp0 proporciona el directorio del archivo por lotes en ejecución. Si el archivo por lotes está en un directorio diferente, obtendrá ese otro directorio. % CD% siempre te da el directorio actual.
Mihai Danila
@MihaiDanila, no, eso no es lo que OP preguntó.
Bart De Vos
En realidad llegué a esta pregunta mientras buscaba una forma de obtener el directorio actual . Este fue el primer éxito en Google. El título obviamente dice directorio actual , aunque tienes razón sobre el contenido. Ambos tenemos razón, pero creo que lain y yo tenemos más razón sobre lo que realmente transmite la pregunta, a pesar de lo que pretendía. Es por eso que he subido la respuesta de lain ... El título de la pregunta debe cambiarse para sincronizarse con la pregunta misma.
Mihai Danila
1
Probablemente el título del artículo en el enlace podría haberse proporcionado, ya que el enlace ya no es válido .....
Rupsingh Mathwale
16

El directorio actual se encuentra en% CD%

user9517 es compatible con GoFundMonica
fuente
44
% CD% retiene la ruta desde la que ejecuta el lote, no donde existe el archivo por lotes
Mohammad AL-Rawabdeh
44
@Mohammad: De hecho, es el directorio actual . El otro es el directorio donde está el archivo por lotes. Esos dos no son lo mismo y su pregunta pregunta explícitamente por este. Así que edítelo si eso no es lo que quiere decir.
Joey
% CD% devuelve la ruta actual del archivo por lotes pero falla cuando ejecutamos el archivo por lotes como administrador. Cuando ejecutamos un archivo por lotes como administrador, devuelve la ruta de System32. Entonces, la mejor opción es usar% ~ dp0 para la ruta completa
% ~ dp0 proporciona el directorio del archivo por lotes en ejecución. Si el archivo por lotes está en un directorio diferente, obtendrá ese otro directorio. % CD% siempre te da el directorio actual.
Mihai Danila
Para referencia del lector, la pregunta originalmente usaba el término "directorio actual" mientras que significaba el directorio que contenía el script, esto ahora está solucionado.
chiccodoro
4

Algunas expresiones que afectan el nombre del archivo:

~f0le dará el nombre de archivo completo.
~dpnx0dará lo mismo que ~f0, pero esto le muestra que puede dividirlo en partes: d = unidad p = ruta n = nombre x = extensión

Mechaflash
fuente
0

usar el comando chdir

Opción 1:

chdir 

Opcion 2:

echo %CD%
sensoft
fuente
Lo mismo aquí: esta no era la intención del OP: la pregunta ahora es más clara.
chiccodoro