Batch file 批处理:如何解析包含文件系统路径的字符串?
变量中包含一个字符串,例如:Batch file 批处理:如何解析包含文件系统路径的字符串?,batch-file,path,text-parsing,Batch File,Path,Text Parsing,变量中包含一个字符串,例如: "C:\Users\SomeUser\Desktop\SomeFolder\File.jar" 我想将File.jar从这个字符串解析为另一个变量。目前,我在代码中有以下内容: FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F) 只要文件夹路径保持相同的长度,这种方法就可以工作。然而,我希望能够移动程序和文件,并仍然有一切工作正常。有没有什么方法可以从右向左解析,就像一个想
"C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
我想将File.jar从这个字符串解析为另一个变量。目前,我在代码中有以下内容:
FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F)
只要文件夹路径保持相同的长度,这种方法就可以工作。然而,我希望能够移动程序和文件,并仍然有一切工作正常。有没有什么方法可以从右向左解析,就像一个想法一样?任何建议都将不胜感激。我想您可以更改脚本,使用
*
处理所有令牌。由于您正在使用每个标记的值设置变量,因此最后一个标记将被分配给变量
FOR /f "tokens=* Delims=\" %%A IN (%string%) DO (set myvariable=%%F)
尝试应用路径修饰符,如下所示:
set "inputPath=C:\Users\SomeUser\Desktop\SomeFolder\File.jar"
for %%i in ("%inputPath%") do set fname=%%~nxi
echo %fname%
%%~nx
从循环变量中提取文件名根(n
)和文件名扩展名(x
);i、 例如,它从循环变量的值中提取最后一个/filename组件。(
%%i
在本例中被选为循环变量,但任何字母都可以。)
另一个常用的构造是
%%~dp
,用于提取驱动器规格(d
)和带有终止\
(p
)的绝对路径(无驱动器规格)-这甚至适用于相对输入路径。例如,
%%~dp0
将扩展到批处理文件所在文件夹的绝对路径
所有受支持的路径修饰符的列表如下所示。(请注意,它们只在参数方面进行了讨论,但它们同样适用于for循环变量)。非常有效。谢谢@恩德雷加是我的荣幸;很高兴听到这个消息;我添加了一些附加信息和文档链接。