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
“tokenises”它从文件中读取的每一行。线被解释为
定界符 TOKEN1 定界符 token2 定界符 token3 ...
其中该组以下的delims
选项=
(在这种情况下,空间)的字符被定义为分隔符。
tokens=...
定义将选择哪些标记。在这种情况下,将选择令牌1和令牌2以及*
,这意味着“指定的最高令牌编号之后的所有内容”,因此令牌3 和其余行将成为第三个选择。
第一选择将被分配给定义的metavariable
,在这种情况下为%%a
。下一个将被分配到%%b
等等。这些metavariables
区分大小写。
因此,对于有问题的线路,%%a
得到creating
,%%b
得到environment
和%%c
得到"EnvironmentName"
的if /i
比较不区分大小写的(这就是为什么我没有理会你已经使用的情况下)。 ~
删除围绕变量内容的任何引号,因此目标行的%%~a%%~b
将为creatingenvironment
。检测到该行时,分配行的其余部分 - 将引号(%%~c
)包含在变量中。
当该文件已被处理,看是否变量被设置并报告任何内容或尚未设置(这就是为什么它被明确设置为什么被处理的文件之前。
请注意,我刚刚输入这个动态,我没有测试它。可能有错误 - 这就是为什么用于变量名称的战争与和平是缺点。变量名称不区分大小写。
如果文件名包含空格,那么你需要
for /f "usebackqtokens=1,2*delims= " %%a in ("%findfile%") do (
(这也会为文件名的工作,没有空间,当然 - 但引入并不需要在马上解释一个额外的元素检测所需数据的上下文)
是的。你可以使用'FOR/F'命令来解析'FIND'或'FINDSTR'命令的输出。 – Squashman
在一个块(括号中的行序列)中,'%anyvariable%'被评估为变量的初始值,因此在第二个'findstr'之后'%errorlevel%'将被替换为'0'。这里的正常解决方案是使用'if not errorlevel 1',这意味着'如果当前错误级别不是1也不大于1',因此在正常情况下为'0'。注意:不涉及'%'。 – Magoo