Necesito ruta a la carpeta que contiene el archivo cmd. Con% 0 puedo obtener el nombre del archivo. ¿Pero cómo obtener el nombre de la carpeta?
c: \ temp \ test.cmd >> test.cmd
PD: Mi directorio actual! = Carpeta de la secuencia de comandos.
Para el nombre de la carpeta y la unidad, puede usar:
echo %~dp0
Puede obtener mucha más información utilizando diferentes modificadores:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
The modifiers can be combined to get compound results:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
Esta es una copia pegada de "for /?" comando en el indicador. Espero eso ayude.
Los 10 consejos principales de DOS Batch (Sí, DOS Batch ...) muestran batchparams.bat (enlace a la fuente como una idea general):
C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1 = c:\windows\notepad.exe
%~f1 = c:\WINDOWS\NOTEPAD.EXE
%~d1 = c:
%~p1 = \WINDOWS\
%~n1 = NOTEPAD
%~x1 = .EXE
%~s1 = c:\WINDOWS\NOTEPAD.EXE
%~a1 = --a------
%~t1 = 08/25/2005 01:50 AM
%~z1 = 17920
%~$PATHATH:1 =
%~dp1 = c:\WINDOWS\
%~nx1 = NOTEPAD.EXE
%~dp$PATH:1 = c:\WINDOWS\
%~ftza1 = --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
cd /d "%~dp0"
(de stackoverflow.com/questions/4451668 )La respuesta aceptada es útil, pero no es inmediatamente obvio cómo recuperar un nombre de archivo de una ruta si NO está utilizando valores pasados. Pude resolver esto desde este hilo, pero en caso de que otros no tengan tanta suerte, así es como se hace:
Ahora la
:file_name_from_path
función se puede usar en cualquier lugar para recuperar el valor, no solo para pasar en argumentos. Esto puede ser extremadamente útil si los argumentos se pueden pasar al archivo en un orden indeterminado o si la ruta no se pasa al archivo en absoluto.fuente
%~dp1
para unidad y ruta."
s alrededor!myPath!
si su ruta tiene espacios (o hacer que las comillas formen parte de myPath)Para asignarlos a las variables, asegúrese de no agregar espacios al frente o después del signo igual:
Entonces no deberías tener problemas.
fuente
En caso de que alguien quiera un método alternativo ...
Si es el último subdirectorio en la ruta, puede usar este one-liner:
Esto devolvería lo siguiente:
El .... regresa al directorio anterior. / ad muestra solo directorios / b es una lista de formato simple que incluye todos los subdirectorios. Esto se utiliza para obtener la ruta completa del directorio para imprimir.
fuente
Tuve el mismo problema en mi bucle donde quería extraer archivos zip en el mismo directorio y luego eliminar el archivo zip. El problema era que 7z requiere la carpeta de salida, así que tuve que obtener la ruta de la carpeta de cada archivo. Aquí está mi solución:
%% i era una ruta completa de nombre de archivo y% ii \ .. simplemente devuelve la carpeta principal.
Espero eso ayude.
fuente
En caso de que la respuesta aceptada por Wadih no funcione para usted, intente
echo %CD%
fuente
Esto se puso junto con un ejemplo editado cmd
fuente