本帖最后由 cjiabing 于 2011-9-1 22:18 编辑
批处理练习与考试系统,当前版本:V1.3
更新:
1、支持自定义题库路径,可拖入。
2、支持随机抽取题目进行考试,有待增强。
3、支持调整屏幕大小和颜色,添加自定义色块,使得界面更漂亮。
4、本系统修改后也可以用于其它学科的考试,通用性强。
说明:
1、所用的题库目前只支持不定项选择题。问答题、案例分析题、写作题、论述题、阅读题等等可能无能为力了,最好在论坛做。
2、题库是变动的、庞大的,靠我自己出题有点困难,大家一起补充上去吧。有好的题库请直接回帖即可。
3、注意一个题库的版权问题,此处不好解释。
4、添加题库的办法请参照说明和代码后面的例子。
批处理练习和考试系统,献给批处理之家的朋友们!~
- @echo off&setlocal enabledelayedexpansion&set cc=84&color !cc!&set cc0=44e&set cc1=00c
- ::By Cjiabing;:&Date 2011-08-19
- ::下一步计划:模拟综合考试可以指定模块的考试,指定考试题目的题数、考试时间限制等等,不是很难,有现成模板,不过有空才能升级。
- if not "%~1"=="" (set "GetPath=%~1") else (if exist BatchExam.txt (set "GetPath=BatchExam.txt") else (set "GetPath=%~0"))
- goto Menu
- 变量说明:
- GetPath-路径设置
- Inport-普通输入
- Input-常用输入
- Var-常用变量
- Str-常用变量
- Num-计数
- cou-计数
- Shu-计数
- Xue-计数
- :Menu
- ::获得题库和菜单。
- title 批处理练习与考试系统 BatchExam V1.3 ^&From 批处理之家 http://www.bathome.net
- if not exist %GetPath% set "GetPath=%~0"
- set Var=
- set Str=
- set Num=0
- set Inport=
- set Input=
- cls&echo;&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "批处理练习与考试系统"&echo;◇&echo;
- echo; ------------------------------------------------------------------------
- echo; 序号 试题
- for /f "tokens=1* delims=:★" %%a in ('findStr /i /b /n "★" %GetPath%') do echo; %%a %%b&set /a Num+=1
- if %Num% lss 1 (echo; 一共有 %Num% 套题。当前没有题库请添加并命名为BatchExam.txt。) else (echo; 一共有 %Num% 套题。当前题库:%GetPath%)
- echo; ------------------------------------------------------------------------
- echo; 模拟综合考试【K】设置【S】关于【H】退出【Q】
- echo; 输入序号进入相应试题;输入路径进入自定义试题。&echo;&set Num=0&set cou=0
- set /p Inport= 请输入:
- if "%Inport%"=="" goto Menu
- if /I "%Inport%"=="Q" exit
- if /I "%Inport%"=="H" goto About
- if /I "%Inport%"=="K" goto Exam
- if /I "%Inport%"=="S" goto Setting
- if exist %Inport% set "GetPath=%Inport%"&goto Menu
- echo;
- for /f "tokens=1* delims=:" %%a in ('findStr /i /b /n "★" %GetPath%') do (
- rem !Var!==!Inport! %%a if !Var1!==!Inport! set Str=!Var!&pause
- if !Var!==!Inport! set Str=%%a&call :AnswerRequires&goto ExerciseAnswer
- if %%a==!Inport! set Str=1000&call :AnswerRequires&goto ExerciseAnswer
- set Var=%%a
- )
- echo;&echo; 输入有误,请重新输入!&echo;&pause
- goto Menu
- :Exam
- ::建立随机排序和考试模式。
- call :AnswerRequires
- echo;
- echo; 正在读取题库,请稍候……
- echo;
- cd.>#Temp#
- for /f "tokens=1*" %%i in ('cmd /v:on /c "@echo off&for /f "usebackq tokens^=*" %%a in (`findStr /i /b "[0-9]*、" !GetPath!`) do (echo ^!random^! %%a)"^|sort') do (
- for /f "tokens=1* delims=:" %%l in ('findStr /i /b /n "%%j" %GetPath%') do (
- set Shu=-1
- set Xue=0
- set Num=0
- echo;%%m
- for /f "tokens=1,*" %%x in ('more /e +%%l %GetPath%') do (
- set /a Shu+=1
- set /a Xue=%%l+!Shu!
- if !Shu!==0 set /a Num=%%l+5
- if %%l leq !Xue! if !Xue! leq !Num! if not "%%y"=="" (echo;%%x %%y) else (echo;%%x)
- )
- )
- )>>#Temp#
- set "GetPath=#Temp#"
- set Inport=0
- goto ExamAnswer
- :ExamAnswer
- ::考试答题过程。
- set Tm1=%time%
- set Num=0
- title 开始测试,开始时间 %Tm1%
- echo;&echo;&echo;
- for /f "tokens=1,* delims=、" %%a in (%GetPath%) do (
- if not "%%a"=="" if %%a lss 999999 echo;&echo;&echo;&echo;&set /a Num+=1&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "第 !Num! 题【%%a】"&echo;◇&echo;&echo;&echo; %%b&echo;
- for %%r in (A B C M) do if /i %%a==%%r echo; %%a、%%b
- for %%r in (A0 B0 C0 D0) do if /i %%a==%%r echo; %%b
- if /i %%a==D (echo; %%a、%%b&echo;&echo;&echo;&echo;&echo;&echo;&echo;&echo;&set Input=&set /p Input= 请输入答案:&if /i !Input!==Q Call :End&goto Menu)
- if /i %%a==E if /i !Input!==%%b (set /a cou+=1&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " →"&call :Colour "!cc0:~0,1!!cc0:~2,1!" "回答正确!共得 !cou! 分。"&echo;) else (echo;&&call :Colour "!cc:~0,1!!cc1:~0,1!" " ★"&call :Colour "!cc0:~2,1!!cc0:~0,1!" "回答错误!请再想一想。"&echo;)
- if /i %%a==F (if not "%%b"=="" (echo; 【讲解】%%b) else (echo; 【讲解】缺))&(
- echo; ------------------------------------------------------------------------&echo;
- set Input=&set /p Input= 请按任意键继续【Y】大小【SZ】颜色【CC】退出【Q】:
- if /i !Input!==Q Call :End&goto Menu
- if /I "!Input:~0,2!"=="SZ" (call :ScreenZoom !Input!)
- if /I "!Input:~0,2!"=="CC" (call :ChangeColor !Input!)
- )&echo;&echo;&echo;&echo;
- )
- pause
- Call :End&goto Menu
- :ExerciseAnswer
- ::练习答题过程。
- set Tm1=%time%
- title 开始测试,开始时间 %Tm1%
- echo;&echo;&echo;
- for /f "tokens=1,* delims=、" %%a in ('more /e +!Inport! %GetPath%') do (
- set /a Str-=1
- rem 【%%a】 【%%b】
- rem !Inport! if !Inport! leq !Str! if not %%a==★&pause
- if !Inport! leq !Str! if not %%a==★ (
- if not "%%a"=="" if %%a lss 999999 echo;&echo;&echo;&echo;&set /a Num+=1&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "第 !Num! 题【%%a】"&echo;◇&echo;&echo;&echo; %%b&echo;
- for %%r in (A B C M) do if /i %%a==%%r echo; %%a、%%b
- for %%r in (A0 B0 C0 D0) do if /i %%a==%%r echo; %%b
- if /i %%a==D (echo; %%a、%%b&echo;&echo;&echo;&echo;&echo;&echo;&echo;&echo;&set Input=&set /p Input= 请输入答案:&if /i !Input!==Q Call :End&goto Menu)
- if /i %%a==E if /i !Input!==%%b (set /a cou+=1&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " →"&call :Colour "!cc0:~0,1!!cc0:~2,1!" "回答正确!共得 !cou! 分。"&echo;) else (echo;&&call :Colour "!cc:~0,1!!cc1:~0,1!" " ★"&call :Colour "!cc0:~2,1!!cc0:~0,1!" "回答错误!请再想一想。"&echo;)
- if /i %%a==F (if not "%%b"=="" (echo; 【讲解】%%b) else (echo; 【讲解】缺))&(
- echo; ------------------------------------------------------------------------&echo;
- set Input=&set /p Input= 请按任意键继续【Y】大小【SZ】颜色【CC】退出【Q】:
- if /i !Input!==Q Call :End&goto Menu
- if /I "!Input:~0,2!"=="SZ" (call :ScreenZoom !Input!)
- if /I "!Input:~0,2!"=="CC" (call :ChangeColor !Input!)
- )&echo;&echo;&echo;&echo;
- ) else (Call :End&goto Menu)
- )
- pause
- Call :End&goto Menu
- :End
- ::答题结束。
- set /a Shu=Xue=0
- set /a Shu=!Num!-!cou!
- set /a Xue=!Num!/2>nul
- cls&echo;&echo;&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "结果统计"&echo;◇&echo;
- echo; ------------------------------------------------------------------------
- echo;
- if %Xue% gtr 0 if !cou! gtr %Xue% (echo; 恭喜你,及格了!) else (echo; 你仍需加油哦!)
- echo;
- echo; 结束时间:%time:~0,2% 时 %time:~3,2% 分 %time:~6,2% 秒
- echo; 开始时间:%Tm1:~0,2% 时 %Tm1:~3,2% 分 %Tm1:~6,2% 秒
- echo; 共得分 !cou! 分;
- echo; 题目共 !Num! 题;
- echo; 共答对 !cou! 题;
- echo; 共答错 %Shu% 题;
- echo;&echo; ------------------------------------------------------------------------
- if exist #Temp# del /q /f #Temp#>nul
- echo; 结束返回&pause>nul&goto :eof
- ::echo; 错题:for /f %%a in (#tmp#) do set /p= %%a<nul
- :Setting
- cls&echo;&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "设 置"&echo;◇&echo;
- echo; ------------------------------------------------------------------------
- echo 调整屏幕大小:SZ1【常规】SZ2【中等】SZ3【较大】。
- echo 自定义输入如:MODE con: COLS=85 LINES=25
- echo 调整屏幕颜色:CC0【默认】CC1【白绿】CC2【白蓝】CC3【黄土】。
- echo 自定义输入如:Color 84
- echo 可以直接输入命令进入CMD界面,如:Color/?
- call :Colour "4f" " BatMPlayer皮肤颜色选择器" &echo →【Color = 主体色块 + 标题色块 + 增强色块】
- echo →【主体色块】背景色和字体色,用于程序整体皮肤颜色;
- echo →【标题色块】标题底色和字体色;
- echo →【增强色块】用于警告和图案等。
- echo →每个色块由两个颜色代码组成背景色和前景色,默认:Color = 27 44e 00c
- echo →当前颜色:Color = %cc% %cc0% %cc1%
- call :Colour "!cc:~0,1!0" " →黑白色:0=黑色"&call :Colour "!cc:~0,1!8" "、8=灰色"&call :Colour "!cc:~0,1!7" "、7=白色"&call :Colour "!cc:~0,1!f" "、f=亮白色"&echo;;
- call :Colour "!cc:~0,1!1" " →冷色调:1=蓝色"&call :Colour "!cc:~0,1!9" "、9=淡蓝色"&call :Colour "!cc:~0,1!3" "、3=湖蓝色"&call :Colour "!cc:~0,1!b" "、b=浅淡绿色"&call :Colour "!cc:~0,1!2" "、2=绿色"&call :Colour "!cc:~0,1!a" "、a=淡绿色"&echo;;
- call :Colour "!cc:~0,1!4" " →暖色调:4=红色"&call :Colour "!cc:~0,1!c" "、c=淡红色"&call :Colour "!cc:~0,1!5" "、5=紫色"&call :Colour "!cc:~0,1!d" "、d=淡紫色"&call :Colour "!cc:~0,1!6" "、6=黄色"&call :Colour "!cc:~0,1!e" "、e=淡黄色"&echo;。
- echo →当前色与背景色相同时无法显示。
- echo; ------------------------------------------------------------------------
- echo;
- set /p Inport= 请输入(返回【Q】):
- if "%Inport%"=="" goto Menu
- if /I "%Inport:~0,4%"=="MODE" cmd /c %Inport%&goto setting
- if /I "%Inport:~0,5%"=="COLOR" cmd /c %Inport%&goto setting
- if /I %Inport%==Q goto Menu
- if /I %Inport%==H goto About
- if /I %Inport%==S goto Setting
- call :ScreenZoom %Inport%
- call :ChangeColor %Inport%
- cmd /c %Inport%&pause
- goto setting
- :ScreenZoom
- if /i %1==SZ1 MODE con: COLS=85 LINES=25&goto :eof
- if /i %1==SZ2 MODE con: COLS=105 LINES=57&goto :eof
- if /i %1==SZ3 MODE con: COLS=125 LINES=90&goto :eof
- goto :eof
- :ChangeColor
- if /i %~1==CC0 color 84&goto :eof
- if /i %~1==CC1 color 27&goto :eof
- if /i %~1==CC2 color 3f&goto :eof
- if /i %~1==CC3 color 6e&goto :eof
- goto :eof
- :Colour
- pushd "%temp%"
- >"%~2",set/p= <nul
- findstr /a:%~1 .* "%~2*"
- del "%~2"
- popd
- goto :eof
- :AnswerRequires
- ::答题要求。
- echo;&echo;&echo; 请认真阅读《答题要求》。&echo;&echo;&echo;&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "答题要求"&echo;◇&echo;
- echo; ------------------------------------------------------------------------
- echo; 1、所有题目均为不定项选择题,有可能是一个答案,也可能是多个答案。
- echo; 2、请按提示输入你的答案,字母不分大小写。
- echo; 3、多个答案的字母要按ABCD顺序排列。如填“ABCD”正确;“BDCA”错误。
- echo; 4、答案各个字母之间不能带有空格。如填“BCD”正确;“B CD ”错误。
- echo; 5、每道题只有一次回答机会,不能回头重做,请认真答题。
- echo; 6、每道题目在回答之后提供有答案和解析,
- echo; 7、考试结束后有评分,每道题一分,最后算总分。
- echo; 8、当前题目不计数量,不计时,答对超过一半算及格。
- echo; 9、退出正在进行的考试【Q】。
- echo; ------------------------------------------------------------------------
- echo;&echo;&echo;&echo;&echo;&echo;&echo;
- set Input=
- set /p Input= 是否继续【Y/Q】:&cls
- if /i !Input!==Q (Call :End&goto Menu) else (goto :eof)
- goto :eof
- :About
- cls&echo;&echo;&call :Colour "!cc:~0,1!!cc1:~0,1!" " ◇"&call :Colour "!cc0:~0,1!!cc1:~2,1!" "关于《批处理练习与考试系统》"&echo;◇&echo;
- echo; ------------------------------------------------------------------------
- echo 编写本系统的目的是为了方便新手学习和巩固批处理方面的知识和技术。
- echo 本系统的题库一部分属于本人编写,一部分来自批处理之家。
- echo 相关答案和知识请浏览批处理之家论坛和参考微软文件Ntcmds.chm。
- echo 支持拖入打开新题库,可自行添加题目和扩展功能,自己补充题目的办法:
- echo; 第一、补充题库。比如补充一套“批处理进程”方面的习题。
- echo; 先定好大标题“★ 批处理进程”,标题名必须以实心五角星“★”开头,
- echo; 并在五角星和标题名之间留一空格。
- echo; 第二、补充具体的一道题目。题目由题干和选项组成。
- echo; 题干就是题目问题本身,包括题号和题目;只能是一行。
- echo; 选项内容超过一行时用A0、B0、C0、D0补充,题目用M补充,解析用F补充。
- echo; 选项就是供选择的答案,有A、B、C、D四个,且只能是四个。
- echo; 在四个选项后面还有E和F,E用作正确答案,F用作解释。
- echo; 注意题号和题目之间、选项字母和选项之间要用中文标点顿号“、”。
- echo; 其他:请将题库补充到代码后面。应该不支持一些特殊符号,需要转义符。
- echo; 题库不能太庞大,题目和选项需顶格。其他问题请参考题库。
- echo 请尊重题库原创版权,凡使用涉及商业性质请联系批处理之家论坛获取授权。
- echo 批处理之家论坛 http://www.bathome.net
- echo; ------------------------------------------------------------------------
- pause>nul
- goto Menu
-
- Rem 普通例题
- ★ 【示例一】批处理基础知识
- Rem 题库以“★ ”开头,星号后面有一个空格。
- 111111、下列对批处理概念的描述,正确的是:
- Rem 题目由数字和中文顿号开头,如“111111、”
- A、批处理(Batch),也称为批处理脚本。
- Rem 选项由大写字母和中午顿号开头,如“A、”
- B、批处理是一种简化的脚本语言,也称作宏。
- C、批处理由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)解释运行。
- D、批处理文件具有.bat或者.cmd的扩展。
- Rem 只能有A、B、C、D四个选项。
- E、ABCD
- Rem 此项指定为答案。不定项选择。此处和填写答案时要保证ABCD的顺序,字母前后和中间不能有空格或者其他字符,否则对比可能不成功。
- F、本套题目参考批处理之家论坛、微软文件Ntcmds.chm、百度百科等资料编写。
- Rem 此项指定为解释,可以填写你的解释内容。
- Rem 当题目和选项内容超过一行时的题库编辑方法:
- ★ 【示例二】SET命令
- 113111、假如:SET Var=我爱北京天安门,从%Var%截取“爱”字。
- M、以下截取字符串正确的是:
- rem 补充的题目以“M、”开头,表示题目的另外一行。
- A、echo %Var:~2,1%
- B、echo %Var:~1,1%
- B0、正确的应该是这个:echo %Var:~1,1%
- Rem 超过一行的选项使用“选项0、”的开头方式表示选项的另外一行,比如:A0、B0、C0、D0、
- C、echo %Var:~0,1%
- D、echo %Var:~-1,1%
- E、B
- F、批处理在截取字符串时存在一个位置的偏移量。
- F、%Var:~2,1%提取“北”字,%Var:~1,1%提取“爱”字,%Var:~0,1%提取“我”字,%Var:~-1,1%提取“门”字。
- Rem 超过一行的解释可能在答题时不是很美观,直接“F、”开头即可。
复制代码
|