如何访问同一 FOR 循环中的 FOR 循环集中的环境变量



这是我所拥有的:

FOR /f %%G IN (schoolstudents%studentname%classes.txt) DO (
    set /p grade=<"schoolstudents%studentname%classes%%Ggrade.txt"
    pause
    echo %grade%
    echo You Have %grade% in %%G
)
pause

我的问题是我回来了:

You have  in Math.
You have  in English.

在年级.txt文件中,我有一个A,另一个是B。%%G 在整个 FOR 命令中设置为英语和数学,并找到文件夹。但是由于某种原因,%grade%变量没有设置。我不知道为什么。谢谢

你需要延迟扩展:

@echo off
set "student=schoolstudents%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将只访问文件的第一个单词。检查令牌和delims选项。

如果我正确理解您的文件夹结构,以下内容将起作用。喜欢这个:

  • 学生\姓名1\班级1
  • .\ . . . . . .\类2
  • . . .
  • 学生\姓名2\班级1
  • .\ . . . . . .\类2

.txt位于名称文件夹中,成绩.txt文件位于每个类文件夹中。


 @echo off
    set /p studentname="Enter student name: "
    set studentpath=C:schoolstudents%studentname%
      For /f %%G in (%studentpath%classes.txt) do (
        For /f %%i in (%studentpath%%%Ggrade.txt) do (
            echo %studentname% got %%i in %%G
          )
      )
    pause

您需要设置正确的studentpath

外部循环从类中读取类.txt并将值(类名(分配给 %%G。然后运行内部循环以获取此类的成绩,该成绩分配给 %%i。结果被回显,我们回到下一节课的外循环。这解决了延迟扩展的问题(此处解释(,方法是不在 for 循环中设置任何变量,而只是使用参数 %%G 和 %%i 作为输出。

请注意,这种嵌套循环的设置之所以有效,是因为内部循环只需要循环一次 - 从grade.txt中获取该单个类的单个成绩。

使用"嵌套的 for 循环,对于外部循环的每次迭代,将执行内部循环的所有迭代。[@MCND]。因此,例如,如果 grade.txt 包含两个类的成绩,每个类都在单独的行上,如下所示:
. 一个
. 乙
结果将是:
. 学生在数学
方面获得了学位. 学生姓名在数学
中得到B. 学生获得了英语
. 学生姓名在英文中得到B

如果您在

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

最新更新