如何在同一个FOR循环中设置的FOR循环中访问环境变量?

时间:2014-12-06 19:24:36

标签: windows variables batch-file 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%变量由于某种原因未设置。我无法弄清楚为什么。感谢

3 个答案:

答案 0 :(得分: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只能访问文件的第一个单词。检查令牌和delim选项。

答案 1 :(得分:0)

如果您在使用" "时使用echo,也许会有更好的结果?即echo "$VARIBALE"

答案 2 :(得分:0)

如果我正确理解您的文件夹结构,以下内容将有效。像这样:

  • 学生\ NAME1 \ Class1的
  • 。 。 。 。 。 。 。 。\ 。 。 。 。 。 \类2
  • 。 。
  • 学生\ NAME2 \ Class1的
  • 。 。 。 。 。 。 。 。\ 。 。 。 。 。 \类2

即可。 。 。并且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循环中设置任何变量来解决DelayedExpansion(explained here)的问题,而只是使用参数%% G和%% i作为输出。

请注意,嵌套循环的这种设置只能起作用,因为内部循环只需要循环一次 - 从grade.txt获取该单个类的单个等级。

使用&#34;嵌套for循环,对于外循环的每次迭代执行内部for的所有迭代。&#34; [@MCND]。因此,例如,如果grade.txt包含两个类的等级,每个等级都在一个单独的行上,如下所示:
。一个
。 b
结果将是:
。学生得到了数学 。 studentname在数学方面得到了b 。 studentame得到了一个英文
。 studentname用英语b了