批处理:如何解析包含文件系统路径的字符串?

时间:2014-12-04 04:11:36

标签: 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)

只要文件夹路径保持相同的长度,这就有效。但是,我希望能够移动程序和文件,并且仍然可以正常运行。有没有办法从右到左解析,就像一个想法?任何建议都将不胜感激。

2 个答案:

答案 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)