Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从.txt文件批量提取文本_Batch File - Fatal编程技术网

Batch file 从.txt文件批量提取文本

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

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

我有一个.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是我需要在批处理文件中使用的字符串

这是可能的吗

提前谢谢你的时间

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
。注意:不涉及
%