Назад | Перейти на главную страницу

Как мне получить последнюю часть каталога из командной строки

Как сохранить последнюю часть каталога в переменной?

Например, у меня есть следующий путь: A\B\C\D, Я хочу сохранить D в переменной как file_name=D.

Из-за вашего тега Windows я предполагаю, что ваш cmd.exe имеет встроенные расширения. Если это так, вы можете использовать два из FORссылки на специальные подстановочные переменные:

Учитывая переменную %A, содержащий путь и файл:

%~nA выведет имя файла, %~xA выведет расширение файла. В следующем примере используется вертикальная черта | как разделитель. Канал является недопустимым символом для файлов и путей и должен не появляются на пути. Это позволит использовать пробелы в путях и именах файлов. Видеть FOR /? для получения полной информации.

C:\> SET FSPATH=C:\WINDOWS\Temp\file.txt
C:\> echo %FSPATH%

C:\WINDOWS\Temp\file.txt

C:\> FOR /F "delims=|" %A IN ("%FSPATH%") do echo %~nxA

file.txt

В качестве альтернативы, если у вас нет расширений в вашем cmd.exe, ты можешь использовать delims=\, подсчитайте разделители каталогов и разделите строку пути / файла на основе этого числа.

Редактировать: За ваш комментарий об ошибке. Выше пример в командной строке. Если вы хотите сделать то же самое в пределах пакетный скрипт, вам нужно удвоить % по переменным:

FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA

Чтобы использовать значение вне FOR цикл, вам нужно будет присвоить значение другой переменной. Переменная %%A ограничивается рамками FOR.

:: example.bat
SET FSPATH=C:\Windows\bfsvc.exe
FOR /F "delims=|" %%A IN ("%FSPATH%") DO (
    echo Inside loop %%~nxA
    SET SOMEFILE=%%~nxA
)

ECHO Outside loop %SOMEFILE%

Попробуйте:

for %f in (A\B\C\D) do set var=%~nxf