中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何用Choice实现10秒内未输入指定字符即调用Autoexec
作者:
标题: [已结]如何用Choice实现10秒内未输入指定字符即调用Autoexec 上一主题 | 下一主题
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『楼 主』:  [已结]如何用Choice实现10秒内未输入指定字符即调用Autoexec

如题。

请各位高手帮忙!

[ Last edited by willsort on 2006-4-10 at 12:35 ]

2006-2-27 11:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 2 楼』:  

比如:
在autoexec.bat中当执行到
choice /c:a/n
时,一定得输入字符a,才会继续往下执行,否则10秒后就自动再次运行autoexec.bat本身。

2006-2-27 11:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 3 楼』:  

或者系统自动重启

2006-2-27 12:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 4 楼』:  

自己顶一下了

2006-2-27 17:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lks205
初级用户





积分 86
发帖 32
注册 2006-1-27
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by martin325 at 2006-2-27 11:48:
比如:
在autoexec.bat中当执行到
choice /c:a/n
时,一定得输入字符a,才会继续往下执行,否则10秒后就自动再次运行autoexec.bat本身。

你是想要达到上面这个目的吗?如果是这样,只需要多设立一个选项,用开关/t设置为默认及等待时间,不就行了吗

[ Last edited by lks205 on 2006-2-27 at 21:30 ]

2006-2-27 21:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 6 楼』:  

想到了,也这样做了,很好。

而且又调用了一个含choice命令的批处理!

2006-2-28 04:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by martin325 at 2006-2-27 11:48:
比如:
在autoexec.bat中当执行到
choice /c:a/n
时,一定得输入字符a,才会继续往下执行,否则10秒后就自动再次运行autoexec.bat本身。

有一个问题,就是”非a“字符如何在Choice中表达?

2006-2-28 09:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lks205
初级用户





积分 86
发帖 32
注册 2006-1-27
状态 离线
『第 8 楼』:  

在开关/C:后面原意设几个就输入几个吧,比如 /c:12345也行

2006-2-28 13:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 9 楼』:  

这样也行,屏蔽了这些号码,但是没有屏蔽掉所有的”非a“字符。

2006-2-28 15:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 10 楼』:  

Re martin325:


      源于 choice.com 本身的特性,在实现指定时间内等待某个缺省按键的功能时,会出现一个小问题。

      比如在代码[1]中,如果直接按下 a 则以1为错误码结束choice,并继续运行;如果不按任何键等待10秒则以2为错误码结束choice,然后在if中再次进入autoexec.bat,看来似乎可以满足你的需要。

      但不幸的是,如果在等待过程中按下了非a和n的键,则choice会终止原有的倒计时,将始终等待用户按下a或n键。也就是说,如果用户按下了未设定的无效按键字符,则缺省等待的倒计时将自动终止。这与 MSDOS 启动配置菜单中的倒计时特性如出一辙。

      对这个特性,没有什么太好的解决办法,我的办法是修改 choice.com 。脚本[2]是我以前所写的一个choice扩展脚本,它只能修改Win98下的choice.com,使用 debug choice.com < choicex.asd > nul 可以将它所在目录下的choice.com 修改并保存为新的 ChoiceX.com,这个choicex.com的功能扩展在[2]中已经提到。

      因为修改需要具备一些简单的dos和debug的知识,如果你不太熟悉,可以将脚本[2]choicex.asd、批处理[3]ModChc.bat以及Win98下的choice.com同时保存到一个目录下,然后运行ModChc.bat即可生成ChoiceX.com。

      如果你只需要不终止倒计时的扩展,而不需要对Esc/回车/空格的额外扩展,那么你可以删去[2]中047D和0A80两段。

[1]choice test
choice /c:an /t:n,10 /n
if errorlevel 2 autoexec.bat
:: continue
[2]ChoiceX.asd - Choice 扩展 DEBUG 汇编脚本
:: ChoiceX.asd - Choice 扩展 DEBUG 汇编脚本
:: Will Sort - 14:48 2005-5-15 - Debug
:: Modifition:
::   1.Not terminates timeout when press invalid choice key
::   2.press ESC to terminate timeout
::   3.press CR or SPACE to choose default choice key
a 047D
JNZ     0482        ; Call 0A80 when press control key
CALL    0A80        ; get second byte of scancode of control key
CALL    0A85        ; process event of press ESC, CR, SPACE

a 04A2
JMP     0451        ; Not terminate timeout when press invalid choice key        

a 0A80
MOV     AH,08       ; get char again
INT     21
RET
CMP     AL,1B       ; if press ESC
JZ      0A94        ; YES, terminate timeout
CMP     AL,0D       ; if press CR
JZ      0A91        ; Yes, goto set default choice
CMP     AL,20       ; if press SPACE
JNZ     0A99        ; No, goto return
MOV     AL,[018A]   ; set default choice
MOV     BYTE PTR [0189],00    ; set timeout is zero
RET

n ChoiceX.com
w
q
:: Please reserved this line.
[3]ModChc.bat - 扩展 choice.com 的缺省按键功能
:: ModChc.bat - 扩展 choice.com 的缺省按键功能
:: Will Sort - 2005-5-15 - CMD@WinXP
@echo off
if "%1"=="Error:" goto Error

:SysInit 设置 NT 命令行代码页,修正中文显示
if not "%OS%"=="Windows_NT" goto Locate
chcp 437>nul
graftabl 936>nul

:Locate
if exist ChoiceX.com %0 Error: Found ChoiceX.COM / 错误:已存在ChoiceX.COM

echo Locating script . . .              定位修改脚本 . . .
echo.
if not exist ChoiceX.asd %0 Error: Not found script / 错误:未找到修改脚本

echo Locating CHOICE.COM . . .          定位 CHOICE.COM . . .
echo.
if exist %windir%\command\choice.com set ChcLoc=%windir%\COMMAND
for %%p in (%path%) do if exist %%p.\choice.com set ChcLoc=%%p.
if exist %1.\choice.com set ChcLoc=%1.
if "%ChcLoc%"=="" %0 Error: Not found CHOICE.COM / 错误:未找到CHOICE.COM

:CheckIn
echo Checking CHOICE.COM . . .          验证 CHOICE.COM . . .
echo.
dir %ChcLoc%\choice.com | find "22:22"> nul
if errorlevel 1 %0 Error: Invalid CHOICE.COM / 错误:无效的CHOICE.COM

echo Located to %ChcLoc%\CHOICE.COM, Modify?       
echo 定位到 %ChcLoc%\CHOICE.COM, 是否修改?
echo.
echo Cancel: press Ctrl+C key           取消: 请按Ctrl+C键
echo Continue: press other key          继续: 请按其它键
echo.
pause > nul

:Modify
Echo Modifying CHOICE.COM . . .         修改 CHOICE.COM . . .
echo.
copy %ChcLoc%\choice.com ChoiceX.com > nul
debug ChoiceX.com < ChoiceX.asd > nul

:CheckOut
Echo Checking new ChoiceX.COM . . .     验证新的 ChoiceX.COM . . .
echo.
if not exist ChoiceX.com %0 Error: Modification failed / 错误:修改失败
echo Modification passed !              修改成功 !
goto End

:Error
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
echo.

:Clear
for %%e in (ChcLoc ChsScr) do set %%e=

:End
echo Press any key to exit              按任意键结束
pause>nul
[ Last edited by willsort on 2006-2-28 at 16:27 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-2-28 16:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 11 楼』:  

看来什么问题也难不到斑竹的:)

佩服中……

2006-2-28 17:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 12 楼』:  

向热心的willsort版主致敬!

本人刚刚测试,一切OK!

谢谢

2006-2-28 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
secowu
初级用户





积分 201
发帖 92
注册 2005-12-28
状态 离线
『第 13 楼』:  

能否直接提供修改好的CHOICEX下载呀

2006-3-7 17:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 14 楼』:  提供修改好的CHOICE.COM下载

按willsort斑竹的修改方案修改的CHOICE.COM,现提供直接下载。

附件 1: CHOICE.rar (2006-4-8 21:02, 2.85 K, 下载附件所需积分 1 点 ,下载次数: 41)
2006-4-8 21:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: