2014-12-06 97 views
0

這是我有:如何訪問在同一個FOR循環中設置的FOR循環中的環境變量?

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和其他A B。 %% G在整個FOR命令中設置爲英語和數學,並找到文件夾。但%grade%變量由於某種原因未設置。我無法弄清楚爲什麼。謝謝

回答

0

如果我正確理解了您的文件夾結構,下面的內容將起作用。就像這樣:

  • 學生\名1 \ class1的
  • 。 。 。 。 。 。 。 \ \。 。 。 。 。 。 \ class2
  • 。 。 。
  • students \ name2 \ 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(explained here)的問題。

請注意,此嵌套循環設置僅適用,因爲內部循環只需循環一次 - 從grade.txt中爲單個類獲取單一等級。

使用「嵌套循環,對於外部循環的每次迭代全部迭代的內部執行」。 [@MCND]。因此,例如,如果grade.txt包含兩個類的等級,則每個類都在單獨的行上,如下所示:
。 a
。b
結果將是:
。學生名字得到了一個數學
。學生名字在數學中得到b
。學生名字有英文
。學生名字得到b英文

+0

上面的答案沒有用,但是你的原始響應與嵌套for循環一起工作得很完美。再次感謝@sjoy如果你可以加回來,那會很棒。 – TonyStark 2014-12-07 21:49:19

+0

行@TonyStark。回到以前的答案。驚訝的讀取文件的set/p方法沒有工作,因爲我測試了一切,但很好,這就是你所需要的。 – sjoy 2014-12-07 22:38:34

0

也許你會有更好的結果,如果你使用" "echo工作?即echo "$VARIBALE"

+0

沒有這沒有產生更好的結果。我得到的只是'你在'數學'中有'「 – TonyStark 2014-12-06 20:03:31

1

您需要延遲expansion

@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只讀取文件的第一行。 和%%G將只能訪問該文件的第一個單詞。檢查令牌和分隔符選項。

+0

我應該更清楚一點。每個班級都有一個文件夾,並且是一個grade.txt文件。所以我想把%grade%設置爲每個班級文件夾文本文件中的成績。要查找的類文件夾我想要由classes.txt文件中的類名確定,然後將類文件夾的路徑作爲%% G,然後放入%% H等。因此,classes.txt中的每個類都將在其文件夾中查找grade.txt,然後等級回顯。我希望這是有道理的。除非延遲擴張會解決這個問題。但我不知道延遲擴張是什麼。對不起,冗長的解釋... – TonyStark 2014-12-06 19:53:49

+0

我也嘗試使用上面的答案,但它產生了相同的結果。 @npocmaka – TonyStark 2014-12-06 20:50:38

+0

@TonyStark將會更容易讓你用例子來解釋 – npocmaka 2014-12-07 19:30:35