中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 帮忙优化一下及修改? 上一主题 | 下一主题
guo882633
初级用户





积分 126
发帖 53
注册 2007-2-4
来自 -
状态 离线
『楼 主』:  帮忙优化一下及修改?

@echo off
mode con lines=20 cols=90

:sot
cls
echo.
set ID=
set /p ID=      请输入3位学生代号码:
for /f "tokens=1*" %%i in ('findstr "%ID:~0,10%" mdb.txt') do (
    cls
    echo.
    echo     学生号:%ID%
    echo.
    echo.
    echo     学生信息:%%j
)
pause >nul 2>nul
goto sot

mdb.txt内容
00001  张三   语文    成绩:100分
00002  张四     语文   成绩: 85分
00003  张五   语文   成绩: 90分

请高手帮忙改下,把结果分行显示出来(例:姓名一行。科目一行。成绩一行显示出来)
   谢谢

2010-4-1 22:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (517992574)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

'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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-2 13:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: