Пакет DOS: получить последнюю папку по относительному пути

У меня есть следующие значения в пакетном файле DOS (например...):

..\Apple\Jones  
..\Banana\Smith  
..\Pear\Wilson  

Мне нужно извлечь значения фамилии ("Джонс", "Смит", "Уилсон") из каждого значения. Какой метод я могу использовать, чтобы всегда давать мне эти значения подстроки?


person lance    schedule 30.11.2010    source источник
comment
Windows cmd не DOS. В DOS нет такой возможности, как %~n0   -  person phuclv    schedule 20.06.2017


Ответы (2)


В соответствии с этой темой: Что лучший способ сделать подстроку в пакетном файле?

Я предлагаю вам использовать

%~n0
person Nicolas    schedule 30.11.2010
comment
Я не понимаю. Это показывает мне имя пакетного файла? Как это дает мне то, что задает вопрос? - person lance; 30.11.2010
comment
Извините за мое плохое объяснение. %0 содержит путь к вашему скрипту. С помощью %~n0 вы извлекаете только имя скрипта. Вот более явный пример: для /D %%i в (..\Apple\Jones,..\Banana\Smith,..\Pear\Wilson) выполните echo %%~ni - person Nicolas; 30.11.2010
comment
Восхитительный. Спасибо. Примечание. Я использовал echo %%~ni%%~xi, так как моя последняя папка (настоящие данные) — это каталог, в имени которого есть точка. - person lance; 30.11.2010
comment
%%~ni%%~xi можно записать как %%~nxi - person Stephan; 20.06.2017

Я уже написал функцию для этого. Вы указываете ему любой путь, и он возвращает вам только имя файла или путь. Работает для любого пути: URL, путь Windows, путь Linux и т. д.

Скопируйте эту функцию в конец вашего пакетного скрипта: (Инструкции ниже)

rem ===========================================================================

:Name_From_Path
SetLocal

set _TMP_FOLDERNAME=%1
for %%g in ("%_TMP_FOLDERNAME%") do set _TMP_FOLDERNAME=%%~nxg

EndLocal & set _Name_From_Path=%_TMP_FOLDERNAME%
goto :EOF

rem ===========================================================================

Применение:

CALL :Name_Of_Path ..\Apple\Jones
ECHO %_Name_From_Path%

Результат: Джонс

person Frank Einstein    schedule 20.06.2017