我需要有关批处理文件的帮助。
我有一个.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是我需要在批处理文件中使用的字符串。
这可能吗?
提前感谢您的时间。
答案 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 (
(当然,这也适用于没有空格的文件名 - 但引入了一个额外的元素,不需要在检测到所需数据的情况下立即解释)