[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-029】批处理利用choice进行程序倒计时启动

出题目的:
  了解并利用第三方工具choice.exe
加分原则:
  1、完善代码加分10分
  2、其中思路独特基分5分
  3、代码简洁基分3分
  4、不用其它命令进行延时基分2分
题目如下:
  利用choice.exe在程序启动前进行10秒倒计时,中间可按任意字母退出,10秒后自动启动程序,至于要启动什么样的程序只需表示出来即可,你甚至于用一个echo命令表示就可以了。
choice.exe下载:http://bbs.bathome.net/thread-1726-1-1.html

[ 本帖最后由 Batcher 于 2009-5-1 21:10 编辑 ]
***共同提高***

rat兄就是不一样,一句命令够简洁,但兄似乎漏掉了倒计时。。。
***共同提高***

TOP

原帖由 lixiaodaoaaa 于 2008-10-22 16:05 发表


按任意键,退出,你的功能实现了,但是按 space键,不退出,哈哈
那就不算按任意键了。。。。就有问题了 ^_^
所以代码需要继续完善。。。

任意键是做不到的,所以本题也只要求任意字母退出,同时本人来抛下砖吧:
  1. @echo off
  2. set "n=10"
  3. :begin
  4. cls&echo 请输入任意字母退出,否则10秒后程序将启动,计时:%n%秒
  5. choice /c 1abcdefghijklmnopqrstuvwxyz /d 1 /t 1 /n
  6. if %errorlevel% neq 1 goto :eof
  7. set /a n-=1
  8. if %n% neq 0 (goto begin) else (goto next)
  9. :next
  10. cls&echo 程序已启动&pause>nul
复制代码
***共同提高***

TOP

楼上的代码会忽略字母"a"。。。
***共同提高***

TOP

修改下本人6楼的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (10,-1,0) do (
  3.     cls&echo 请输入任意字母退出,否则10秒后程序将启动,计时:%%i秒
  4.   choice /c 1abcdefghijklmnopqrstuvwxyz /d 1 /t 1 /n
  5.     if !errorlevel! neq 1 goto :eof
  6. )
  7. cls&echo 程序已启动&pause>nul
复制代码
***共同提高***

TOP

pusofalse版主最后一句是不是丢掉了pause,你这样的效果是倒计时后也是退出。。。
***共同提高***

TOP

原帖由 随风 于 2008-10-22 19:52 发表
感觉此题已经脱离了 choice 的实际用途,在这里只是起到延时作用。
类似与 for /l %%a in (1 1100) do ver>nul

随风兄此言差已,不用choice能实现输入字符就退出吗?我想纯批不回车是做不到的。。。再说,本题的目的也是
在于让更多的人了解choice这个三方工具啊。
***共同提高***

TOP

知其然还应知其所以然

看来大家对choice都还是有所兴趣,下面我就来简单讲讲choice.exe的运行机制吧:
    其实choice.exe的参数是比较简单的,就先解释下程序的参数吧:
    /c 指定要选择的项,这个项是以一个字符为一个项,如输入choice /c 12345
程序就会认定有5个选项,而省略/c参数,程序就会默认yn为选项;
    /m "..."选项提示信息,如此例choice /c 123 /m "1继续,2返回,3退出";
    /n 隐藏选项信息,仅保留提示信息;
    /t 指定选择默认项之前等待的时间,这个时间是以秒为单位的,数值范围是
0-999,数值为0即为不等待;
    /d 在有/t参数的前提下指定选项中的默认选项,如choice /c abc /d c /t
10就是在10秒后指定默认选项c,其实我们可以得用choice这个特性来做延时处理;
    /cs choice默认选项是不区分大小写的,只有使用/cs参数才会区别大小写,
如choice /cs /c Aa这样才会认定Aa是两个选项。
    接下来以下面这段代码来做为示例,来讲讲choice.exe的判断机制:
  1. @echo off
  2. choice /c abc
  3. goto %errorlevel%
  4. :1
  5. echo bathome&goto end
  6. :2
  7. echo batman&goto end
  8. :3
  9. echo wrong
  10. :end
  11. pause>nul
复制代码
当输入a时会显示bathome,当输入b时会显示batman,当输入c时会显示wrong
,那么程序是怎么做到跳转的呢?原来当choice接收用户输入的信息时就会反馈
给系统一个值errorlevel,而这个值是从1开始并随选项向后递增的,像上面这段
代码中接收a字符的返回值为1、b为2、c为3,除些以外返回值均为255,也就是无
效输入,因此可见choice的选项最多可以有254个(因为choice选项不支持中文字
符,因此是达不到最高选项数的)。
    好了,本人也就简单讲到这里,至于怎么灵活运用choice就看大家平时的实
践和思考了。

[ 本帖最后由 batman 于 2008-10-22 23:32 编辑 ]
1

评分人数

    • rat: LZ有心了PB + 8
***共同提高***

TOP

楼上是不是再检查下自己的代码?
***共同提高***

TOP

问题一:倒计时不合要求,在:main标签下加个cls能解决
问题二:无论怎么样后面的happy birthday,bathome都会执行,没有退出程序
***共同提高***

TOP

返回列表