Как получить последнюю часть каталога из командной строки
Как мне сохранить последнюю часть каталога в переменной?
Например, у меня есть следующий путь: A\B\C\DЯ хочу хранить D в переменной, как file_name=D,
2 ответа
Из-за вашего тега 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%