0

我是 Windows 批处理脚本的新手,无法从文本文件中提取信息。我的脚本需要遍历行数未知的文本文件并搜索字符串“安装程序 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
)  

但我在用两个单词和冒号搜索“安装程序 ID:”的 %%i 时遇到问题,从那里我不确定如何正确地为 %%i 子串。

4

3 回答 3

0

这里的问题是它将 Installer 和 ID 视为单独的命令。更重要的是,ID 后面的 : 意味着它把 ID: 当作一个驱动器。要绕过它,请将 Installer ID: 括在引号中。

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

Test
abcinstaller ID:xyz
Test 2

然后我可以搜索它:

findstr "Installer ID:" test.txt

它返回:

abcinstaller ID:xyz
于 2012-12-05T13:44:06.850 回答
0

正如 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%
于 2012-12-05T14:20:22.757 回答
0

将 FINDSTR 命令放在 FOR IN() 子句中,然后解析结果。

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

Installer ID: OTFI-316
Installer ID:OTFI-316
Installer ID:      OTFI-316

您想要第二个标记(*in tokens=2*)之后的所有内容。

@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"
于 2012-12-05T15:11:46.393 回答