Batch file 从.txt文件批量提取文本
我需要有关批处理文件的帮助 我有一个.log文件,我在其中搜索一个特定的字符串,但现在我在下一步遇到了问题,我需要搜索其他字符串,然后获取一个介于“”之间的字符串,以便在批处理中使用它。我不确定这是否可行 例如:Batch file 从.txt文件批量提取文本,batch-file,Batch File,我需要有关批处理文件的帮助 我有一个.log文件,我在其中搜索一个特定的字符串,但现在我在下一步遇到了问题,我需要搜索其他字符串,然后获取一个介于“”之间的字符串,以便在批处理中使用它。我不确定这是否可行 例如: set findtext="text2find" set findfile="text.log" findstr %findtext% %findfile% if %errorlevel% == 0 ( findstr "Creating Environment " %findfi
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是我需要在批处理文件中使用的字符串
这是可能的吗
提前谢谢你的时间
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
/f的“标记化”它从文件中读取的每一行。该行被解释为
分隔符标记1分隔符标记2分隔符标记3
其中delims
选项中=
后面的一组字符(在本例中为空格)被定义为分隔符
tokens=…
定义将选择哪些令牌。在这种情况下,将选择令牌1和令牌2,以及*
,这意味着“指定的最高令牌编号之后的所有内容”,因此令牌3和行的其余部分将是第三个选择
第一个选择将分配给定义的元变量
,在本例中为%%a
。下一个将分配给%%b
,依此类推。这些元变量
区分大小写
因此,对于所讨论的行,%%a
获取创建
,%%b
获取环境
和%%c
获取环境名称
if/i
不敏感地比较案例(这就是为什么我没有注意到您使用的案例)。~
删除元变量内容周围的任何引号,因此目标行的%%~a%%~b
将是creatingenvironment
。当检测到该行时,将该行的其余部分(包括引号(%%~c
)分配给变量
处理文件后,查看变量是否已设置并报告其内容或未设置(这就是为什么在处理文件之前将其显式设置为nothing)
请注意,我只是在运行中输入了这个,我没有测试它。可能会有错误-这就是为什么variablenames的“战争与和平”是一个缺点。variablenames不区分大小写
如果文件名包含空格,则需要
for /f "usebackqtokens=1,2*delims= " %%a in ("%findfile%") do (
(这当然也适用于不带空格的文件名-但引入了一个额外的元素,不需要在检测所需数据时立即解释)是。您可以使用for/F
命令来解析FIND
或FINDSTR
命令的输出。在一个块内(括号中的行序列),将%anyvariable%
作为变量的初始值进行计算,因此%errorlevel%
将在第二次findstr
后替换为0
。这里的正常解决方案是使用if not errorlevel 1
,这意味着如果当前errorlevel既不是1,也不大于1,则为u正常情况下,0
。注意:不涉及%
。