从.txt文件中提取文本批处理

时间:2017-09-05 18:19:56

标签: batch-file

我需要有关批处理文件的帮助。

我有一个.log文件,其中我搜索一个特定的字符串,但现在我在下一步遇到麻烦,我需要搜索其他字符串,然后在“”之间得到一个字符串,批量使用它我不确定如果这是可行的。

示例:

set findtext="text2find"
set findfile="text.log"

findstr %findtext% %findfile%

if %errorlevel% == 0 (
findstr "Creating Environment " %findfile%
 if %errorlevel% == 0 (
 set Environment=[Text from log file]
 )
)

日志文件包含一行: 创建环境“EnvironmentName”

EnvironmentName是我需要在批处理文件中使用的字符串。

这可能吗?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

set "environmentname="
for /f "tokens=1,2*delims= " %%a in (%findfile%) do (
 if /i "%%~a%%~b"=="creatingenvironment" set "environmentname=%%~c"
)
if defined environmentname (
 echo environment name=%environmentname%
) else (
 echo environment name was not found
)

这应该可以获取您的数据。我已经假设您已经适当地设置了findfile

for /f"标记"它从文件中读取的每一行。该行被解释为

分隔符 token1 分隔符 token2 分隔符令牌3 ...

其中=选项中delims之后的字符集(在本例中为空格)被定义为分隔符。

tokens=...定义将选择哪些令牌。在这种情况下,将选择token1和token2,以及*,这意味着"指定了最高标记号后的所有内容"所以token3 和行的其余部分将是第三个选择。

第一个选择将分配给定义的metavariable,在这种情况下为%%a。下一个将分配给%%b,依此类推。这些metavariables区分大小写。

因此,对于有问题的行,%%a获取creating%%b获取environment%%c获取"EnvironmentName"

if /i比较不区分大小写(这就是为什么我不理会你使用过的情况)。 ~会删除围绕元变量内容的所有引号,因此%%~a%%~b将为目标行creatingenvironment。检测到该行时,将该行的其余部分 - 包含引号(%%~c)分配给该变量。

当文件处理完毕后,查看变量是否已设置并报告其内容或未设置(这就是为什么在明确之前将其明确设置为 nothing 的原因)文件已处理完毕。

请注意,我只是即时输入,我还没有测试过。可能存在错误 - 这就是为什么变量名的战争与和平是一个缺点。变量名不区分大小写。

如果您的文件名包含空格,那么您需要

for /f "usebackqtokens=1,2*delims= " %%a in ("%findfile%") do (

(当然,这也适用于没有空格的文件名 - 但引入了一个额外的元素,不需要在检测到所需数据的情况下立即解释)