ho trovato questa combinazione di approcci dalle risposte di djangofan e paranoico di essere sia, semplice e perfettamente s ufficient, quando alzando lo sguardo directory principale del mio script:
set FULL_PATH=%~dp0
set FULL_PATH=%FULL_PATH:~1,-1%
for %%i in ("%FULL_PATH%") do set "PARENT_FOLDER=%%~ni"
echo %PARENT_FOLDER%
Dal momento che si desidera lavorare su input dell'utente, invece, è necessario fare un certo lavoro aggiuntivo minimo, per gestire le variazioni di legge come C: \ foo \ bar \ a. txt vs. C: \ foo \ bar \ a.txt o c: /foo/bar/a.txt. Questo potrebbe quindi lavorare per voi:
@setlocal
@echo off
call:GET_PARENT_FOLDER C:\foo\bar\a.txt
echo %PARENT_FOLDER%
call:GET_PARENT_FOLDER C:\foo\bar\\a.txt
echo %PARENT_FOLDER%
call:GET_PARENT_FOLDER c:/foo/bar/a.txt
echo %PARENT_FOLDER%
pause
goto:EOF
:GET_PARENT_FOLDER
:: Strip the filename, so we get something like this: 'C:\foor\bar\'
set "_FULL_PATH=%~dp1"
:: Strips all dangling '\' and '/' in a loop, so the last folder name becomes accessible
:_STRIP
if not "%_FULL_PATH:~-1%"=="\" if not "%_FULL_PATH:~-1%"=="/" goto:_STRIP_END
set "_FULL_PATH=%_FULL_PATH:~1,-1%"
goto:_STRIP
:_STRIP_END
:: We need the context of a for-loop for the special path operators to be available
for %%i in ("%_FULL_PATH%") do set "PARENT_FOLDER=%%~ni"
goto:EOF
Grazie .. U r genio :) .. funziona perfettamente –
Non vedo come possa funzionare. % ~ p1 non funziona per me. Funziona solo con% ~ dp0 o% ~ p0. – djangofan
@djangofan Lo script prende un percorso come argomento e restituisce il nome della directory del percorso. – asdfg