path - una - Cómo obtener la ruta de la carpeta desde la ruta del archivo con CMD
rutas absolutas y relativas linux (6)
En caso de que alguien quiera un método alternativo ...
Si es el último subdirectorio en la ruta, puede usar este único trazo:
cd "c:/directory/subdirectory/filename.exe/../.." && dir /ad /b /s
Esto devolvería lo siguiente:
c:/directory/subdirectory
El .... vuelve al directorio anterior. / anuncio muestra solo directorios / b es un listado de formato desnudo / s incluye todos los subdirectorios. Esto se usa para obtener la ruta completa del directorio para imprimir.
Necesito una 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 del script.
En caso de que la respuesta aceptada por Wadih no haya funcionado para ti, prueba echo %CD%
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:
@echo off
setlocal enabledelayedexpansion enableextensions
set myPath=C:/Somewhere/Somewhere/SomeFile.txt
call :file_name_from_path result !myPath!
echo %result%
goto :eof
:file_name_from_path <resultVar> <pathVar>
(
set "%~1=%~nx2"
exit /b
)
:eof
endlocal
Ahora la función :file_name_from_path
se puede usar en cualquier lugar para recuperar el valor, no solo para los argumentos pasados. Esto puede ser extremadamente útil si los argumentos se pueden pasar al archivo en un orden indeterminado o la ruta no se pasa al archivo en absoluto.
Para asignar estos a las variables, asegúrese de no agregar espacios al frente o después del signo igual:
set filepath=%~dp1
set filename=%~nx1
Entonces no deberías tener problemas.
Para el nombre y la unidad de la carpeta, puede usar:
echo %~dp0
Puedes obtener mucha más información usando 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 pegar de "for /?" comando en el prompt. Espero eso ayude.
Relacionado
Los 10 mejores consejos para lotes de DOS (Sí, DOS Batch ...) muestran batchparams.bat (enlace a la fuente como esencia):
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
Tuve el mismo problema en mi ciclo 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:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i/..
)
%% era una ruta de acceso de archivo completa y% ii / .. simplemente devuelve la carpeta principal.
Espero eso ayude.