Как сохранить последнюю часть каталога в переменной?
Например, у меня есть следующий путь: 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