Пакет: Как мне разобрать строку, содержащую путь к файловой системе?
У меня есть строка, содержащаяся в переменной, например:
"C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
Я хотел бы проанализировать File.jar из этой строки в другую переменную. В настоящее время я немного работаю с кодом:
FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F)
Это работает, пока путь к папке остается той же длины. Тем не менее, я хочу иметь возможность перемещать программу и файл и при этом все работать правильно. Есть ли способ разобрать, просто как идею, справа налево? Любой совет будет принята с благодарностью.
2 ответа
Попробуйте применить модификаторы пути следующим образом:
set "inputPath=C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
for %%i in ("%inputPath%") do set fname=%%~nxi
echo %fname%
%%~nx<loop-var>
извлекает имя файла root (n
) и расширение файла (x
) из переменной цикла; т.е. он извлекает последний компонент /filename из значения переменной цикла.
(%%i
в этом случае была выбрана переменная цикла, но подойдет любая буква.)
PS: другая часто используемая конструкция %%~dp<param-or-loop-var->
чтобы извлечь спецификацию диска. (d
) и абсолютный путь (без спецификации диска) с завершающей \
(p
) - это даже работает для относительных входных путей.
Например, %%~dp0
развернется до абсолютного пути к папке, в которой находится пакетный файл.
Список всех поддерживаемых модификаторов пути находится здесь.
(Обратите внимание, что они обсуждаются только с точки зрения параметров, но они одинаково работают с переменными цикла for).
Я полагаю, вы могли бы изменить скрипт для обработки всех токенов, используя *
, И так как вы устанавливаете переменную со значением каждого токена, в конце последний токен будет назначен переменной.
FOR /f "tokens=* Delims=\" %%A IN (%string%) DO (set myvariable=%%F)