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