从另一个文件的字符串中提取数字
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 /?
。
我目前正在处理一个批处理文件,该文件应该从另一个文件中读取版本号。
基本上,我只需要从其他文档中提取字符串并从中获取数字(数字随时间变化)。
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 /?
。