我有一个包含在变量中的字符串,例如:
"C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
我想将此字符串中的File.jar解析为另一个变量。我目前在这方面有点使用代码:
FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F)
只要文件夹路径保持相同的长度,这就有效。但是,我希望能够移动程序和文件,并且仍然可以正常运行。有没有办法从右到左解析,就像一个想法?任何建议都将不胜感激。
答案 0 :(得分:1)
尝试应用路径修饰符,如下所示:
set "inputPath=C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
for %%i in ("%inputPath%") do set fname=%%~nxi
echo %fname%
%%~nx<loop-var>
从循环变量中提取文件名根(n
)和文件扩展名(x
);即,它从循环变量的值中提取last / filename组件
(在这种情况下,%%i
被选为循环变量,但任何字母都可以。(
P.S。:另一个经常使用的构造是%%~dp<param-or-loop-var->
来提取驱动器规格。 (d
)和绝对路径(没有驱动器规范)以及终止\
(p
) - 这甚至适用于相对输入路径。
例如,%%~dp0
将扩展到批处理文件所在文件夹的绝对路径。
所有支持的路径修饰符的列表是here (请注意,它们仅在参数方面进行了讨论,但它们同样适用于for循环变量。)
答案 1 :(得分:0)
我想您可以使用*
更改脚本以处理所有令牌。而且,由于您使用每个标记的值设置变量,因此最后一个标记将被分配给变量。
FOR /f "tokens=* Delims=\" %%A IN (%string%) DO (set myvariable=%%F)