String 从ini文件中找到的路径中提取文件名

String 从ini文件中找到的路径中提取文件名,string,batch-file,String,Batch File,我需要从批处理文件的一行中找到的路径中提取信息。具体来说,这句话说: GLOBP4P=C:\folderx\foldery\folderz\datag.p4p 我需要提取的是上面标识为“数据”的部分。g.p4p始终存在,GLOBP4P始终存在,但两者之间的内容可能因文件而异。我基本上想去掉g.p4p,然后将剩下的任何内容写入第一个“\”变量。在这种情况下,变量将存储“数据”。我的问题是,“数据”可以是任意数量的字符,也可以有任意数量的路径文件夹,等等 我试图用“\”为/f做一个,尝试将字符串分

我需要从批处理文件的一行中找到的路径中提取信息。具体来说,这句话说:

GLOBP4P=C:\folderx\foldery\folderz\datag.p4p
我需要提取的是上面标识为“数据”的部分。
g.p4p
始终存在,
GLOBP4P
始终存在,但两者之间的内容可能因文件而异。我基本上想去掉
g.p4p
,然后将剩下的任何内容写入第一个
“\”
变量。在这种情况下,变量将存储
“数据”
。我的问题是,
“数据”
可以是任意数量的字符,也可以有任意数量的路径文件夹,等等

我试图用“\”为/f做一个
,尝试将字符串分开,但由于我不知道会有多少文件夹,我不知道如何识别以独占方式使用最后一个文件夹(即文件名)

谢谢

编辑:添加了一些解释

在FOR命令中,
%%~N
仅返回FOR参数的文件名,在本例中为
datag
string。输入
以获取/?
了解更多详细信息


当变量通过
%var%
展开时,
%var:~START,LEN%
表示法指示提取从
开始
字符(从零开始)开始并带有
LEN
字符的子字符串。如果
LEN
有减号,则从字符串末尾向后指示最后一个字符。在这种情况下,
%var:~0,-1%
表示从
var
中提取除最后一个字符以外的所有字符,即从
数据g
字符串中删除最后一个字符。输入
SET/?
了解更多详细信息。

试试这个。您将获得在
ini
文件中找到的最后一次发生的事件:

@echo off

::The name of the bat file to test

Set $bat="The_ini_file_to_test.ini"

::Finding the string "GLOBP4P" and setting the value in it

for /f %%a in ('findstr /i "GLOBP4P" "%$bat%"') do set %%a

::Getting the first and the Last element of the path

set first=%GLOBP4P:\=&set last=%

::Outputting some results

echo File  : [%last%]
echo Data  : [%last:~0,-5%]
echo drive : [%first%]
这也应该起作用:

@echo off
for /f "delims=" %%a in ('findstr /i "GLOBP4P=" "file.ini"') do set "var=%%~na"
set "var=%var:~0,-1%"
echo "%var%"

findstr将执行正则表达式模式匹配。您能为OP提供一些说明吗?
@echo off
for /f "delims=" %%a in ('findstr /i "GLOBP4P=" "file.ini"') do set "var=%%~na"
set "var=%var:~0,-1%"
echo "%var%"