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

extract number from string from another file

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

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

set dir=..\folder1\file1.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是batch中的一个关键字,然后好像是文件就暗示是目录。

使用 set "var1=value" 设置 STRING 值 - 这避免了由尾随空格引起的问题。设置算术值不需要引号 (set /a)

因此假设您正在做的是从文件 dir 中找到的字符串
<PlatformToolset>v142</PlatformToolset> 中提取 142(请更改该名称)

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

该行被视为
<定界符序列><定界符序列><定界符序列><定界符序列>

一个定界符序列delims=选项中指定的一个或多个字符;在这种情况下,<>Space

所以 - 其中 %%a(令牌 1)是 PlatformToolset,我们想将 %%c(令牌 2)分配给 vernum

所以 vernum 将变成 v142,文件中包含您发布的测试行。

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

有关 for 体操的更多详细信息,请参阅提示中的 for /?