Ты можешь использовать:
for %f in ("C:\Some\Path\Like\This") do echo "%~nf"
отображать только:
"This"
Если это корень, как это:
for %f in ("C:\") do echo "%~nf"
он не будет отображать ничего подобного:
""
Но ты сказал:
Проблема с приведенным выше сценарием в том, что он показывает полный путь к корневому каталогу.
Вы имеете в виду, например, что при запуске в корне диска будет отображаться:
C:\
or
\
Что это на самом деле отображает и что вы хотите отобразить в случае рута? Я думаю, это должно быть ничего (пусто), но это может быть не то, что вы хотите.
Дайте мне знать, что вы хотите для этого случая, и я посмотрю, смогу ли я исправить ваш пакетный файл.
Редактировать:
Я думаю, что вы подразумеваете под "корнем", это каталог, из которого вы начинаете поиск. Я думал, вы имели в виду, что запускаете командный файл в корневом каталоге диска, например, "C:\".
Этот командный файл должен делать то, что вы хотите ...
Если вы сохраните его в файл с именем:
getdirname.cmd
Тогда вы можете запустить его так:
getdirname.cmd "C:\Some\PATH"
getdirname.cmd C:\Some\PATH
если вы запустите его без каких-либо аргументов, как это:
getdirname.cmd
он будет использовать текущий каталог в качестве отправной точки.
Вот командный файл:
@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
У меня есть структура каталогов, как:
C:\Some\PATH
C:\Some\PATH\aaa
C:\Some\PATH\bbb
C:\Some\PATH\ccc
Если я вошел в (CD) путь:
C:\Some
и я запускаю getdirname как любой из:
getdirname C:\Some\PATH
getdirname C:.\Path
getdirname C:Path
getdirname .\Path
getdirname Path
вывод будет выглядеть так:
"PATH"
"aaa"
"bbb"
"ccc"
Если я запускаю getdirname вроде:
getdirname C:
getdirname .
getdirname .\
вывод будет выглядеть так:
"Some"
"PATH"
"aaa"
"bbb"
"ccc"
Если я запускаю getdirname вроде:
getdirname \
getdirname C:\
и запустите пакетный файл, результат будет выглядеть так:
""
"Some"
"PATH"
"aaa"
"bbb"
"ccc"
Дайте мне знать, если вы делаете то, что вам нужно, или нужны какие-то "корректировки".