我目前正在处理一个批处理文件,该文件应该从另一个文件中读取版本号。
基本上,我只需要从另一个文档中提取字符串并从中获取数字(数字随时间变化)。
set dir=..folder1file1.vcxproj
:: I want to get a string from %dir% with a specific beginning and then extract the version number from it
set string=... ("<PlatformToolset>*")
set vernum=... ("..>v142<..)
这就是我想要达到的目标:
echo %string%
<PlatformToolset>v142</PlatformToolset>
echo %vernum%
142
我希望我能描述我的问题。不幸的是,我几乎没有使用cmd的经验,我很难在这方面表达清楚自己。
我希望有人仍然可以帮助:)
dir
是一个糟糕的变量名,有两个原因。首先dir
是批处理中的关键字,然后当它看起来像文件时,它暗示它是一个目录。
使用set "var1=value"
设置STRING值——这避免了尾随空格引起的问题。设置算术值不需要引号(set /a
)
所以假设你正在做的是从字符串<PlatformToolset>v142</PlatformToolset>
中提取142
在文件dir
(请更改该名称)
for /f "tokens=1,2delims=<> " %%b in ('type "%dir%"') do if "%%b"=="PlatformToolset" set "vernum=%%c"
set "vernum=%vernum:~1%"
注意位置和引用类型('
或"
)是至关重要的。
for
读取文件的每行并分析该行,分配第一个"标记";(1)到%%b
,(2)到%%c
。
该行被视为
<分隔符sequence>
分隔符序列是delims=
选项中指定的一个或多个字符;在这种情况下,& lt;,在和空间
因此-其中%%a
(令牌1)是PlatformToolset
,我们要将%%c
(令牌2)分配给vernum
因此vernum
将变成v142
,其中包含您发布的测试行。
set
命令背后的象形文字由set /?
从提示符中解释-它取vernum
中的值,从"字符1"开始;(字符编号从0开始)),并将结果赋值给变量vernum
有关for
体操的详细信息,请参见提示符中的for /?
。