'findstr "%ID:~0,10%" mdb.txt'这样使用是错误的,例如ID为1时,findstr是无法区分00001和00011与成绩:100分这些的。
@echo off&setlocal enabledelayedexpansion&mode con lines=20 cols=90
:s
cls&echo.&set "a=此学生代号码因"&set "b=而出错&goto e"&set m=100&set n=0&set ID=
set/p ID= 请输入%a:~1,5%:
if "%ID%"=="" echo %a%为空%b%
:n
if not "!ID:~%n%,1!"=="" set/a n+=1 &goto n
if %n% gtr 5 echo %a%长度超出范围%b%
set i=%ID%
for /l %%i in (0 1 9) do if not "!i!"=="" set "i=!i:%%i=!"
if not "%i%"=="" echo %a%含有非法字符%b%
for /l %%i in (5 -1 1) do if !ID:~0^,%%i! equ 0 set ID=!ID:~%%i!
if %ID% gtr %m% echo %a%数值超出范围%b%
set ID=0000%ID%&set ID=!ID:~-5!
::查询
for /f "tokens=1-3,*" %%i in (mdb.txt) do if "%%i"=="%ID%" cls&echo.&echo 学生号:%ID%&echo.&echo.&echo. 姓名:%%j&echo. 科目:%%k&echo. %%l
:e
echo.&echo.&echo.请按任意键重新开始&pause>nul
goto s
允许ID为1或01或001或0001或00001等,等效为00001
变量%m%为学生ID的最大值
推荐mdb.txt中ID为从00001开始的连续数字
如果输入的ID与mdb.txt中的ID完全一致,则:n到::查询中间的部分可以不用
Last edited by Hanyeguxing on 2010-4-2 at 14:52 ]