Você pode usar:
for %f in ("C:\Some\Path\Like\This") do echo "%~nf"
para exibir apenas:
"This"
Se for a raiz assim:
for %f in ("C:\") do echo "%~nf"
não exibirá nada como:
""
Mas você disse:
O problema com o script acima está mostrando o diretório raiz com o caminho completo.
Você quer dizer, por exemplo, quando executado na raiz da unidade, será exibido:
C:\
or
\
O que realmente está sendo exibido e o que você deseja exibir no caso da raiz? Eu acho que não deve ser nada (vazio), mas pode não ser o que você deseja.
Deixe-me saber o que você deseja para este caso e vou ver se consigo consertar seu arquivo em lotes.
Editar:
Eu acho que o que você quer dizer com "raiz" é o diretório em que você está iniciando sua pesquisa. Eu pensei que você queria dizer que você estava executando o arquivo em lotes na raiz do drive como "C: \".
Esse arquivo em lotes deve fazer o que você deseja ...
Se você salvá-lo em um arquivo chamado:
getdirname.cmd
Então você pode executá-lo assim:
getdirname.cmd "C:\Some\PATH"
getdirname.cmd C:\Some\PATH
se você executá-lo sem argumentos como este:
getdirname.cmd
ele usará o diretório atual como ponto de partida.
Aqui está o arquivo em lotes:
@echo off
set "zstartpath=%~1"
if "%zstartpath%."=="." set "zstartpath=."
for %%f in ("%zstartpath%") do set "zfullpath=%%~dpnxf\"
for /r "%zfullpath%" %%f in (.) do call :work "%%~f"
set "zdfname="
set "zdp="
set "zdpath="
set "zfullpath="
set "zstartpath="
set "ztarget="
goto :EOF
:work
set "ztarget=%~1"
for %%g in ("%ztarget%") do set "zdpath=%%~dpnxg"
for %%g in ("%zdpath%") do set "zdfname=%%~nxg"
echo "%zdfname%"
goto :EOF
Eu tenho uma estrutura de diretórios como:
C:\Some\PATH
C:\Some\PATH\aaa
C:\Some\PATH\bbb
C:\Some\PATH\ccc
Se eu estiver logado (CD), o caminho:
C:\Some
e eu corro o getdirname como qualquer um de:
getdirname C:\Some\PATH
getdirname C:.\Path
getdirname C:Path
getdirname .\Path
getdirname Path
a saída será semelhante a:
"PATH"
"aaa"
"bbb"
"ccc"
Se eu executar o getdirname como:
getdirname C:
getdirname .
getdirname .\
a saída será semelhante a:
"Some"
"PATH"
"aaa"
"bbb"
"ccc"
Se eu executar o getdirname como:
getdirname \
getdirname C:\
e execute o arquivo em lotes, a saída será semelhante a:
""
"Some"
"PATH"
"aaa"
"bbb"
"ccc"
Deixe-me saber se isso está fazendo o que você precisa ou se precisa de "ajustes".