ich fand diese Kombination von Ansätzen aus den Antworten von djangofan und paranoid zu sein, sowohl, einfach und perfekt s wechseln ufficient, wenn mein Skript übergeordnetes Verzeichnis aufzuzublicken:
set FULL_PATH=%~dp0
set FULL_PATH=%FULL_PATH:~1,-1%
for %%i in ("%FULL_PATH%") do set "PARENT_FOLDER=%%~ni"
echo %PARENT_FOLDER%
Da Sie stattdessen auf Benutzereingaben arbeiten mag, haben Sie einige minimale zusätzliche Arbeit zu tun, rechtliche Variationen wie C zu handhaben: \ foo \ bar \ a. txt vs. C: \ foo \ bar \ a.txt oder c: /foo/bar/a.txt. Dies könnte dann für Sie arbeitet:
@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
Danke .. U Genie r :) .. funktioniert perfekt –
Ich sehe nicht, wie das funktionieren kann. % ~ p1 funktioniert nicht für mich. Es funktioniert nur mit% ~ dp0 oder% ~ p0. – djangofan
@djangofan Das Skript nimmt einen Pfad als Argument und gibt den Verzeichnisnamen des Pfades zurück. – asdfg