这就是我所拥有的:
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%变量由于某种原因未设置。我无法弄清楚为什么。感谢
答案 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)
如果我正确理解您的文件夹结构,以下内容将有效。像这样:
即可。 。 。并且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了