Пакет: Как мне разобрать строку, содержащую путь к файловой системе?

У меня есть строка, содержащаяся в переменной, например:

"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)
Другие вопросы по тегам