簡體   English   中英

如何在同一個FOR循環中設置的FOR循環中訪問環境變量?

[英]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"

如果我正確理解了您的文件夾結構,則可以進行以下操作。 像這樣:

  • 學生\\名1 \\ class1的
  • 。\\。 \\類class2
  • 學生\\名2 \\ class1的
  • 。\\。 \\類class2

並且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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM