在“E:\学生作业”文件夹下有70个文件夹,分别是USER01、USER02、……、USER70,每个文件夹下又有若干文件名以“13”打头的.TXT文件,都是学生提交的作业。我写了一个批处理程序,如下,其功能是显示所有“13”开头的学生作业文件,并统计总作业份数。- @echo off
- setlocal EnableDelayedExpansion
- setlocal EnableExtensions
-
- set "ClassNO=13"
- set "WorkDir=E:\学生作业"
- set /a n=0
-
- for /R "%WorkDir%" %%a in (%ClassNO%*.txt) do (
- echo %%a
- set /a n+=1
- )
-
- echo 如上所示,共找到%n%份%ClassNO%班的作业!
复制代码 运行结果:
E:\学生作业\USER33\1330温丽方.txt
E:\学生作业\USER39\1310白霜霜.txt
E:\学生作业\USER31\1317葛莹莹.txt
E:\学生作业\USER28\1342张胜男.txt
E:\学生作业\USER28\1343张胜.txt
E:\学生作业\USER64\13 康士娇TXT.txt
E:\学生作业\USER32\1360任丽冉.txt
如上所示,共找到7份13班的作业!
现在我想把For /R循环输出的文件列表进行排序,方便查找个别学生提交作业情况,在For /R外侧加了圆括号和sort命令,- @echo off
- setlocal EnableDelayedExpansion
- setlocal EnableExtensions
-
- set "ClassNO=13"
- set "WorkDir=E:\学生作业"
- set /a n=0
- (
- for /R "%WorkDir%" %%a in (%ClassNO%*.txt) do (
- echo %%a
- set /a n+=1
- )
- )|sort
- echo 如上所示,共找到%n%份%ClassNO%班的作业!
复制代码 但是结果最后输出令我大为意外:
1
2
3
4
5
6
7
E:\学生作业\USER28\1342张胜男.txt
E:\学生作业\USER28\1343张胜.txt
E:\学生作业\USER31\1317葛莹莹.txt
E:\学生作业\USER32\1360任丽冉.txt
E:\学生作业\USER33\1330温丽方.txt
E:\学生作业\USER39\1310白霜霜.txt
E:\学生作业\USER64\13 康士娇TXT.txt
E:\学生作业>(echo E:\学生作业\USER28\1342张胜男.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER28\1343张胜.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER31\1317葛莹莹.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER32\1360任丽冉.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER33\1330温丽方.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER39\1310白霜霜.txt & set /a n+=1 )
E:\学生作业>(echo E:\学生作业\USER64\13 康士娇TXT.txt & set /a n+=1 )
如上所示,共找到0份13班的作业!
为什么结果前半部分出现了1234567后边又出现了带有echo和set命令的输出呢?而最后却说有“0份13班的作业”呢?当我把“| sort”命令删除后运行批处理显示正常。百思不得其解。
谢谢。
[ 本帖最后由 mac007cn 于 2011-1-13 10:32 编辑 ] |