Batch file 如何在文本文件的行中搜索特定关键字并将字符串存储到该关键字的右侧

Batch file 如何在文本文件的行中搜索特定关键字并将字符串存储到该关键字的右侧,batch-file,Batch File,我不熟悉windows批处理脚本,从文本文件中提取信息时遇到问题。我的脚本需要迭代一个具有未知行数的文本文件,并搜索字符串“Installer ID:”。一旦找到了,我需要将任何信息存储在冒号的右侧 例如,如果我的文本文件如下所示: SomeText.txt ------------------------ Installer Date: 2010_10_24_24345 OXF BUILD ID: OXF-12223 Installer ID: OTFI-316 Excel ID: 2-10

我不熟悉windows批处理脚本,从文本文件中提取信息时遇到问题。我的脚本需要迭代一个具有未知行数的文本文件,并搜索字符串“Installer ID:”。一旦找到了,我需要将任何信息存储在冒号的右侧

例如,如果我的文本文件如下所示:

SomeText.txt
------------------------
Installer Date: 2010_10_24_24345
OXF BUILD ID: OXF-12223
Installer ID: OTFI-316
Excel  ID: 2-10186
BUILD DBID: 296414
Version: 6.2
我想储存:

OTFI-316
到目前为止,我已经取得了如下成就:

@echo off
setlocal EnableDelayedExpansion
set file=build_info.txt
FOR /F "tokens=*" %%i IN (%file%) DO (
findstr Installer ID: %%i
if %errorlevel%==0 (
set installer_id=SUBSTRING I
)  

但我在搜索%%I时遇到了问题,无法找到“Installer ID:”及其两个单词和冒号,因此我不确定如何正确地将%%I作为子字符串

这里的问题是,它将Installer和ID视为单独的命令。更重要的是,ID后面的:表示它将ID:视为驱动器。若要绕过它,请将安装程序ID:括在引号中

例如,如果我有一个名为test.txt的文本文件,其中包含以下内容:

Test
abcinstaller ID:xyz
Test 2
然后,我可以使用以下搜索:

findstr "Installer ID:" test.txt
它返回:

abcinstaller ID:xyz

正如user1595254所建议的,我使用FINDSTR定位我需要的内容并将其写入临时文件。然后,我将var设置为该临时文件:

@echo off
findstr "Installer" build_info.txt > findstr_results
findstr "ID" findstr_results> installer_id
set /p installer_id= < installer_id
del findstr_results
del installer_id
echo %installer_id%
@echo关闭
findstr“Installer”build_info.txt>findstr_结果
findstr“ID”findstr_结果>安装程序_ID
set/p安装程序\u id=
将FINDSTR命令放在FOR IN()子句中,并分析结果

我将DELIMS设置为冒号和空格,以便以下所有行都能给出正确的结果:

Installer ID: OTFI-316
Installer ID:OTFI-316
Installer ID:      OTFI-316
您需要第二个令牌之后的所有内容(在
tokens=2*
中的
*


您的帐户中的%%1是否存在错误?你是想写%%i吗?很抱歉,这只是一个输入错误,我在那里尝试了其他一些没有成功的东西,所以我只想还原到更简单的东西。当我尝试时,它告诉我“FINDSTR无法打开X”,X是我文本文件中的每个令牌。我可以告诉findstr搜索字符串而不是文件吗?我应该直接搜索文件并避免FOR循环将其拆分为单独的行吗?其余的文本丢失了。它告诉了你什么?好吧,这更有意义,但我看到“安装程序ID:”仍然被视为两个不同的词。如果我们使用我原来的SomeText.txt示例,使用FINDSTR“Installer ID:”搜索它,将返回其中包含“Installer”或“ID:”的每一行。。。。所以我也会看到“OXF构建ID:OXF-12223,Excel ID:2-10186,构建DBID:296414”,你有没有试过放两个findstr,一个用于安装程序,一个用于ID?这实际上是怎么写的?我尝试嵌套FINDSTR,但结果很奇怪。如何实际存储FINDSTR打印出来的值?如果我可以把它存储到一个变量中,那么我想我可以再次调用FINDSTR。没问题。我喜欢这个答案,它是干净清晰的。我只是想把它说出来并彻底理解一下,您的FOR循环在SomeText.txt中迭代了一组包含“Installer ID:”的行。然后,该命令将%installer\u id%设置为最后一行“installer id:”的第三个->第n个标记,标记用空格分隔,对吗?我在示例中使用了两个不同的文件名,但是您指定“file=build_info.txt”但搜索“SomeText.txt”是否有原因?另外,你能解释一下用引号括起来的集合意味着什么吗?@user1595254-Oops,我打算搜索
“%file%”
。我已经更正了答案。听起来你明白了,除了分隔符是空格和冒号。连续分隔符仅计为一个分隔符-它们不会产生空标记。
@echo off
set "file=build_info.txt"
set "installer_id="
for /f "tokens=2* delims=: " %%A in (
  'findstr /bc:"Installer ID:" "%file%"'
) do set "installer_id=%%B"