这是我所拥有的:
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"