| @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 ( |
| |
| 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 |
| |
| |
| 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 普通例题 |
| ★ 【示例一】批处理基础知识 |
| |
| 111111、下列对批处理概念的描述,正确的是: |
| |
| A、批处理(Batch),也称为批处理脚本。 |
| |
| B、批处理是一种简化的脚本语言,也称作宏。 |
| C、批处理由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)解释运行。 |
| D、批处理文件具有.bat或者.cmd的扩展。 |
| |
| E、ABCD |
| |
| F、本套题目参考批处理之家论坛、微软文件Ntcmds.chm、百度百科等资料编写。 |
| |
| |
| ★ 【示例二】SET命令 |
| 113111、假如:SET Var=我爱北京天安门,从%Var%截取“爱”字。 |
| M、以下截取字符串正确的是: |
| |
| A、echo %Var:~2,1% |
| B、echo %Var:~1,1% |
| B0、正确的应该是这个:echo %Var:~1,1% |
| |
| 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%提取“门”字。 |
| COPY |