标题: [已结]如何用Choice实现10秒内未输入指定字符即调用Autoexec
[打印本页]
作者: martin325
时间: 2006-2-27 11:43
标题: [已结]如何用Choice实现10秒内未输入指定字符即调用Autoexec
如题。
请各位高手帮忙!
[
Last edited by willsort on 2006-4-10 at 12:35 ]
作者: martin325
时间: 2006-2-27 11:48
比如:
在autoexec.bat中当执行到
choice /c:a/n
时,一定得输入字符a,才会继续往下执行,否则10秒后就自动再次运行autoexec.bat本身。
作者: martin325
时间: 2006-2-27 12:00
或者系统自动重启
作者: martin325
时间: 2006-2-27 17:35
自己顶一下了
作者: lks205
时间: 2006-2-27 21:13
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 ]
作者: martin325
时间: 2006-2-28 04:22
想到了,也这样做了,很好。
而且又调用了一个含choice命令的批处理!
作者: martin325
时间: 2006-2-28 09:30
Quote: |
Originally posted by martin325 at 2006-2-27 11:48:
比如:
在autoexec.bat中当执行到
choice /c:a/n
时,一定得输入字符a,才会继续往下执行,否则10秒后就自动再次运行autoexec.bat本身。 |
|
有一个问题,就是”非a“字符如何在Choice中表达?
作者: lks205
时间: 2006-2-28 13:40
在开关/C:后面原意设几个就输入几个吧,比如 /c:12345也行
作者: martin325
时间: 2006-2-28 15:28
这样也行,屏蔽了这些号码,但是没有屏蔽掉所有的”非a“字符。
作者: willsort
时间: 2006-2-28 16:12
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 ]
作者: martin325
时间: 2006-2-28 17:11
看来什么问题也难不到斑竹的:)
佩服中……
作者: martin325
时间: 2006-2-28 21:04
向热心的willsort版主致敬!
本人刚刚测试,一切OK!
谢谢
作者: secowu
时间: 2006-3-7 17:15
能否直接提供修改好的CHOICEX下载呀
作者: martin325
时间: 2006-4-8 21:02
标题: 提供修改好的CHOICE.COM下载
按willsort斑竹的修改方案修改的CHOICE.COM,现提供直接下载。
附件
1: CHOICE.rar (2006-4-8 21:02, 2.85 K, 下载附件所需积分 1点
,下载次数: 41)