2010-07-06 21:29:58 +0000 2010-07-06 21:29:58 +0000
68
68

¿Obtener el nombre de la carpeta actual mediante un comando DOS?

¿Es posible obtener el nombre de la carpeta actual (no la ruta del directorio actual) utilizando un comando del DOS? Si es así, ¿cómo?

Lo más cercano que conseguí fue esto, pero no lo hace:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

nota: el intento anterior era yo tratando de tokenizar la cadena y obtener el último token establecido como la variable CURR.

Respuestas (9)

95
95
95
2010-07-06 22:27:07 +0000

La forma más corta que he encontrado:

for %I in (.) do echo %~nxI

o dentro de un script .bat:

for %%I in (.) do echo %%~nxI

o dentro de un .bat con Get value in variable.

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

Explicación: http://www.robvanderwoude.com/ntfor.php

nx significa sólo nombre de archivo y extensión

31
31
31
2010-08-07 14:55:35 +0000

Si quiere saber la ubicación actual del archivo por lotes (y si su Windows no es una versión muy antigua), escriba for /? en una ventana de “caja de DOS”. Desplázate hacia abajo. Lee.

Descubrirá que ahora puede leer (desde dentro del archivo por lotes) estas variables:

%0 - as the name how this batchfile was called
%~d0 - as the drive letter where this batchfile is located ('\' in case of share)
%~p0 - as path (without the drive letter) where this batchfile is located
%~n0 - as filename (without suffix) of this batchfile
%~x0 - as filename's suffix (without filename) of this batchfile
%~a0 - as this batchfile's file attributes
%~t0 - as this batchfile's date+time
%~z0 - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

Esto funciona para muchos casos. Supongamos que el archivo por lotes se llama mytest.bat. Usted puede llamarlo de diferentes maneras:

  1. ..\..\to\mytest.bat …………………………. (ruta relativa)_
  2. d:\path\to\mytest.bat ……………………… (ruta completa)_
  3. \fileserver\sharename\mytest.bat(ruta en el recurso compartido remoto)

…y siempre obtendrás el valor correcto en tus variables.

16
16
16
2011-11-17 09:20:12 +0000

Personalmente me gustaba la respuesta de Toms, hasta que tuvo problemas con los puntos en los nombres de los dir. Este me dio una pista:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
5
5
5
2013-08-06 13:11:55 +0000

La respuesta de Tom es buena, pero si tienes un nombre de directorio con un punto en él (por ejemplo, wxwidgets-2.9.4) sólo obtendrás el nombre completo. Así que esto daría como resultado wxwidgets-2.9 en su lugar porque el .4 ha sido tratado como una extensión (Sí, ¡aunque es un nombre de directorio!).

Para obtener el nombre completo de salida hay que añadir la extensión al final:

FOR %I IN (.) DO Echo %~nI%~xI

y en el modo de archivo por lotes

FOR %%I IN (.) DO Echo %%~nI%%~xI

O, por supuesto, establecer una variable en el archivo por lotes en su lugar:

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
4
4
4
2012-03-15 10:19:31 +0000

Otra forma es:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

funciona con “.” y espacios en la ruta

¿Qué hace?

  1. poner el nombre de archivo completo (ruta de acceso- nombre de archivo-extensión) en MyPath Var

  2. quitar el nombre de archivo y la extensión de MyPath var

También funciona con rutas UNC. Si necesita la barra invertida al final de la ruta. Elimine el `Otra forma es:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

funciona con “.” y espacios en la ruta

¿Qué hace?

  1. poner el nombre de archivo completo (ruta de acceso- nombre de archivo-extensión) en MyPath Var

  2. quitar el nombre de archivo y la extensión de MyPath var

También funciona con rutas UNC. Si necesita la barra invertida al final de la ruta. Elimine el después del MyPath en el segundo comando del set, por ejemplo:

set "MyPath=%%MyPath:%~nx0=%%"
4
4
4
2012-04-24 15:54:31 +0000

Puedes obtener el dir actual en una variable. Una línea:

set a=%cd%

Compruebe con

echo %a%
2
2
2
2016-10-10 02:11:12 +0000

simplemente

for %%d in ("%CD%") do echo %%~nxd

o

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

Ten cuidado con la barra invertida del final de la ruta, no tiene que ser barra invertida del final.

1
1
1
2011-12-07 18:59:40 +0000

Mi respuesta en este hilo lo hace en 3 simples líneas:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
1
1
1
2015-05-28 16:08:10 +0000

Esto me funciona desde un archivo por lotes. Devuelve el nombre del directorio de trabajo actual.

pushd %1 & for %%i in (.) do @echo %%~ni