从另一个文件中提取字符串中的数字



我目前正在处理一个批处理文件,该文件应该从另一个文件中读取版本号。

基本上,我只需要从另一个文档中提取字符串并从中获取数字(数字随时间变化)。

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><分隔符sequence><分隔符sequence><分隔符sequence>

分隔符序列delims=选项中指定的一个或多个字符;在这种情况下,& lt;,空间

因此-其中%%a(令牌1)是PlatformToolset,我们要将%%c(令牌2)分配给vernum

因此vernum将变成v142,其中包含您发布的测试行。

set命令背后的象形文字由set /?从提示符中解释-它取vernum中的值,从"字符1"开始;(字符编号从0开始)),并将结果赋值给变量vernum

有关for体操的详细信息,请参见提示符中的for /?

相关内容

  • 没有找到相关文章

最新更新