[Path] Come ottenere il percorso della cartella dal percorso del file con CMD


Answers

La risposta accettata è utile, ma non è immediatamente ovvio come recuperare un nome file da un percorso se NON si utilizzano valori passati. Sono stato in grado di lavorare su questo thread, ma nel caso in cui gli altri non siano così fortunati, ecco come è fatto:

@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

Ora la funzione :file_name_from_path può essere utilizzata ovunque per recuperare il valore, non solo per gli argomenti passati. Questo può essere estremamente utile se gli argomenti possono essere passati al file in un ordine indeterminato o il percorso non viene affatto passato nel file.

Question

Ho bisogno di un percorso per la cartella che contiene il file cmd. Con% 0 posso ottenere il nome del file. Ma come ottenere il nome della cartella?

c: \ temp \ test.cmd >> test.cmd

PS La mia directory corrente! = Cartella dello script.




Ho avuto lo stesso problema nel mio ciclo in cui volevo estrarre i file zip nella stessa directory e quindi eliminare il file zip. Il problema era che 7z richiede la cartella di output, quindi ho dovuto ottenere il percorso della cartella di ogni file. Ecco la mia soluzione:

FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
  7z.exe x %%i -aoa -o%%i\..
) 

%% ero un percorso completo del nome file e% ii \ .. restituisce semplicemente la cartella principale.

spero che sia d'aiuto.




Nel caso qualcuno volesse un metodo alternativo ...

Se è l'ultima sottodirectory nel percorso, puoi usare questo one-liner:

cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s

Ciò restituirebbe quanto segue:

c:\directory\subdirectory

Il .... torna alla directory precedente. / annuncio mostra solo le directory / b è un elenco in formato nudo / s include tutte le sottodirectory. Questo è usato per ottenere il percorso completo della directory da stampare.