[英]How to access an environment variable in a FOR loop set in same FOR loop?
這就是我所擁有的:
FOR /f %%G IN (school\students\%studentname%\classes.txt) DO (
set /p grade=<"school\students\%studentname%\classes\%%G\grade.txt"
pause
echo %grade%
echo You Have %grade% in %%G
)
pause
我的問題是我回來了:
You have in Math.
You have in English.
在grade.txt文件中,我一個有A,另一個有B。 在整個FOR命令中,將%% G設置為英語和數學,並找到正確的文件夾。 但是%grade%變量由於某種原因未設置。 我不知道為什么。 謝謝
您需要延遲擴展 :
@echo off
set "student=school\students\%studentname%\classes.txt"
setlocal enableDelayedExpansion
FOR /f %%G IN (%student%) DO (
set /p grade=<%student%
pause
echo !grade!
echo You Have !grade! in %%G
)
pause
endlocal
但等級將始終相同set /p grade=<file
只讀取set /p grade=<file
的第一行。 而%%G
將僅訪問文件的第一個單詞。檢查標記和delims選項。
如果在處理echo
使用" "
,也許會有更好的結果? 即echo "$VARIBALE"
如果我正確理解了您的文件夾結構,則可以進行以下操作。 像這樣:
。 。 。 並且classes.txt位於名稱文件夾中,並且grade.txt文件位於每個類文件夾中。
@echo off
set /p studentname="Enter student name: "
set studentpath=C:\school\students\%studentname%
For /f %%G in (%studentpath%\classes.txt) do (
For /f %%i in (%studentpath%\%%G\grade.txt) do (
echo %studentname% got %%i in %%G
)
)
pause
您需要設置正確的studentpath
。
外循環從classes.txt中讀取一個類,並將值(類名)分配給%% G。 然后,內部循環運行以獲取該類別的分數,該分數被分配給%% i。 結果得到回應,我們返回到下一個類的外循環。 通過不在for循環內設置任何變量,而僅對輸出使用參數%% G和%% i來解決DelayedExpansion問題( 在此處說明 )。
請注意,這種嵌套循環的設置只能起作用,因為內部循環只需要循環一次-即可從grade.txt獲取該單個類的單個成績。
使用“嵌套for循環,對於外部循環的每次迭代, 都將執行內部for的所有迭代。” [@MCND]。 因此,例如,如果grade.txt包含兩個類的成績,每個都在單獨的行中,如下所示:
。 一種
。 b
結果將是:
。 學生在數學上得了一個
。 學生名在數學上得了b
。 學生英文
。 學生名用英語b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.