J'ai trouvé cette combinaison d'approches des réponses de djangofan et paranoïaque être à la fois, simple et parfaitement s ufficient, lors de la recherche dans le répertoire parent de mon 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%
Puisque vous voulez travailler sur l'entrée d'utilisateur à la place, vous devez faire un travail supplémentaire minime, pour gérer les variations juridiques comme C: \ foo \ bar \ a. txt vs. C: \ foo \ bar \ a.txt ou c: /foo/bar/a.txt. Cela pourrait alors travailler pour vous:
@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
Merci .. U r génie :) .. fonctionne parfaitement –
je ne vois pas comment cela peut fonctionner. % ~ p1 ne fonctionne pas pour moi. Cela ne fonctionne qu'avec% ~ dp0 ou% ~ p0. – djangofan
@djangofan Le script prend un chemin en argument et retourne le nom du répertoire du chemin. – asdfg