2014-12-04 114 views
1

我有包含在一个可变的字符串,例如:批处理:如何解析包含文件系统路径的字符串?

"C:\Users\SomeUser\Desktop\SomeFolder\File.jar" 

我想从该字符串转换成另一个变量解析File.jar。我目前有一些与代码工作:

FOR /f "tokens=1-6 Delims=\" %%A IN (%string%) DO (set myvariable=%%F) 

只要文件夹路径保持相同的长度,这工作。不过,我希望能够移动程序和文件,并仍然能够正常工作。有没有什么办法可以从右向左分析?任何建议将不胜感激。

回答

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);即它从循环变量的值中提取最后一个/文件名组件。
%%i被选为在这种情况下,循环变量,但任何字母都行。)


P.S。:另一种常用的结构是%%~dp<param-or-loop-var->提取驱动的规范。 (d)和终止\p)的绝对路径(无驱动器规格) - 这甚至适用于相对输入路径。
例如,%%~dp0将展开到批处理文件所在文件夹的绝对路径。

A 所有支持的路径修饰符列表here
(请注意,它们仅在参数中讨论,但它们同样适用于循环变量)。

+0

完美地工作。谢谢! – endrega 2014-12-04 05:55:36

+0

@endrega我的荣幸;听到那个消息很开心;我已经添加了一些额外的信息和文档链接。 – mklement0 2014-12-04 14:07:32

0

我想你可以改变脚本来处理所有使用*的令牌。而且,由于您使用每个标记的值来设置变量,因此最后一个标记将被分配给该变量。

FOR /f "tokens=* Delims=\" %%A IN (%string%) DO (set myvariable=%%F) 
相关问题