Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理:如何解析包含文件系统路径的字符串?_Batch File_Path_Text Parsing - Fatal编程技术网

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循环变量)。

非常有效。谢谢@恩德雷加是我的荣幸;很高兴听到这个消息;我添加了一些附加信息和文档链接。