如果我正确理解了您的文件夹结构,下面的内容将起作用。就像这样:
- 学生\名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英文
上面的答案没有用,但是你的原始响应与嵌套for循环一起工作得很完美。再次感谢@sjoy如果你可以加回来,那会很棒。 – TonyStark 2014-12-07 21:49:19
行@TonyStark。回到以前的答案。惊讶的读取文件的set/p方法没有工作,因为我测试了一切,但很好,这就是你所需要的。 – sjoy 2014-12-07 22:38:34