中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理秘技 - 用choice指令作時間延遲
« [1] [2] »
作者:
标题: 批处理秘技 - 用choice指令作時間延遲 上一主题 | 下一主题
Roy
管理员

專業島民



积分 4869
发帖 1633
注册 2002-12-10
状态 离线
『楼 主』:  批处理秘技 - 用choice指令作時間延遲

想在批处理中延遲一下時間,可是只想用DOS的基本指令,怎麼辦?
有辦法!
用choice指令就可以!!
例如:
一個十秒的延遲,可以按q退出,
choice /c:!q /t:!,10 /n Press q to exit...

究極奧義!!強制延遲十秒!!
type nul|choice /c:! /t:!,10 /n Please wait for 10 seconds...





我的網站:http://mw16.2ya.com/ 我的網誌: http://scrappedblog.blogspot.com/
~
我的Winamp正在播放的歌曲:
2003-8-16 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
iceboy
银牌会员




积分 1681
发帖 512
注册 2003-8-2
状态 离线
『第 2 楼』:  

如果在延时前加上 ctty nul,延时后加上 ctty con,那么延时中按 CTRL+C 就会死机.. 呵呵



Somehow somewhere I've got to choose.
No matter if it is win or lose.
2003-8-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qjiang
初级用户




积分 106
发帖 1
注册 2003-8-16
状态 离线
『第 3 楼』:  

choice /c:!q /t:!,10 /n Press q to exit...其中的c:!q 什么意思那么/t:!,10中 !,又是什么意思了,能不能针对这个讲讲了

2003-8-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 4 楼』:  

就是说在批处理前面用了这个指令后,在我运行bat文件后的前10秒后悔了,按q就退出它的运行了;是这样吗? 谢谢。


[此贴子已经被作者于2003-8-17 16:33:33编辑过]






一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2003-8-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hotdog
中级用户




积分 411
发帖 78
注册 2003-7-27
状态 离线
『第 5 楼』:  

ctty是msdos里的吗

2003-8-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 6 楼』:  



  Quote:
以下是引用xiaojun在2003-8-16 21:31:46的发言:
就是说在批处理前面用了这个指令后,在我运行bat文件后的前10秒后悔了,按q就退出它的运行了;是这样吗? 谢谢。


[此贴子已经被作者于2003-8-17 16:33:33编辑过]


哪位大侠: 是不是这个意思啊?



一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2003-8-17 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
winddeity
初级用户




积分 311
发帖 62
注册 2003-8-16
状态 离线
『第 7 楼』:  

是外部命令吗?我的ms-dos7.1里怎么没有?



一切都会好起来的
2003-8-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re roy:

    这个方法我从外文书中见到过,但是至今仍然解决不了书中指出的一个缺陷,即:按其它键后倒计时停止,不止Roy有什么办法?



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2003-8-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
下半辈子
中级用户




积分 204
发帖 23
注册 2003-9-16
状态 离线
『第 9 楼』:  

good

2003-9-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
roy
管理员

專業島民



积分 4869
发帖 1633
注册 2002-12-10
状态 离线
『第 10 楼』:  



  Quote:
以下是引用willsort在2003-8-21 16:21:44的发言:
Re roy:

    这个方法我从外文书中见到过,但是至今仍然解决不了书中指出的一个缺陷,即:按其它键后倒计时停止,不止Roy有什么办法?

用強制的吧...



我的網站:http://mw16.2ya.com/ 我的網誌: http://scrappedblog.blogspot.com/
~
我的Winamp正在播放的歌曲:
2004-2-2 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 11 楼』:  



  Quote:
以下是引用hotdog在2003-8-16 22:51:26的发言:
ctty是msdos里的吗

CTTY是DOS的内部命令, 改变用于控制计算机的终端设备。

    若想用另一台设备进行命令输入,可用CTTY命令实现。

语法

    CTTY device

参数

device
    指定进行MS-DOS命令输入的备用设备。参数device的有效值为:
    PRN、LPT1、LPT2、LPT3、CON、AUX、COM1、COM2、COM3和COM4。

相关命令

    在指定一命令解释程序时可改变输入设备,有关介绍参见 命令。


CTTY─注解

为CTTY设置串口

    在用CTTY命令之前,可先用MODE命令设置串口的波特率、奇偶检验位、位
数和停止位。

不使用MS-DOS的程序与CTTY

    很多程序不用MS-DOS管理输入或输出。这些程序直接将输入送到计算机的硬
件。CTTY命令对这些程序不起作用。它只影响那些利用MS-DOS读输入和显示输
出的程序。

用COMMAND设置终端设备

    除了CTTY命令,还可利用COMMAND命令的设备参数来指定输入设备。


[em07]明白否?[em07]



熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-2-3 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『第 12 楼』:  

关于CHOICE命令

    在批处理程序中,提示用户作一选择。显示一指定的提示符并暂停等待用户从
一组指定的键中作出选择。该命令只能用在批处理程序中。

    有关ERRORLEVEL参数的详细介绍,见 和 命令。

语法

    CHOICE [/C[:]keys] [/N] [/S] [/T[:]c,nn] [text]

参数

text
    指出要在提示符前显示的正文。仅当在提示符前的正文中包括有开关字符
   (/)作为正文内容时,才要用双引号。如果不指定正文,CHOICE仅显
    示一个提示符。

开关项

/C[:]keys
    指定提示中可接受的按键。显示时,这些键出现在[]内,键之间以逗号分隔,
    最后跟一问号。若不指定/C开关,CHOICE采用隐含值YN。冒号(:)是可
    选项。

/N
    让CHOICE不显示提示符,但提示符前的正文仍然显示。若指定了/N开关,
    所指定的按键仍有效。

/S
    使CHOICE区别大小写字母。若没指定/S,CHOICE对任何用户指定的
    键,大小写不作区分。

/T[:]c,nn
    在对某一指定关键字作默认设置前,让CHOICE等待一指定秒数的时间。
    /T转换中的值如下所设:

    c
        指定等待nn秒后作为默认值的那个字符。该字符必须出现在/C开关后的按
        键集中。
    nn
        指定暂停的秒数。可接受0-99之间的值。若指定为0,表示默认设置前不
        暂停。

      CHOICE─例子

    为了让用户在批处理文件中见到有关提示的信息, 可在批处理文件用CHOICE
命令。
    如, 在批处理文件中采用了以下语法形式:

    choice /c:ync

    则用户在CHOICE运行时,将看到:

    [Y,N,C]?

    在上例语句中,加入正文:

    choice /c:ync Yes, No, or Continue

    choice /c:ync Yes, No, or Continue

    CHOICE启动时,用户看到:

    Yes, No, or Continue [Y,N,C]?

    去掉提示符后用户所见的信息

    如下例,在批处理程序中用/N转换把提示符去掉:

    choice /n Yes, No, or Continue?

    在CHOICE执行时,用户只见到指定的正文:

    Yes, No, or Continue?

    用了T开关后用户所见的信息

    如果在批处理程序中用以下语句:

    choice /c:ync /t:n,5

    当CHOICE执行时,用户会看到:

    [Y,N,C]?

    5秒后,用户没按任何键,CHOICE就选择N且返回一个ERRORLEVEL值2。如果5秒
内按下某键,CHOICE返回与用户选择相应对的值。

    启动计算机时,若想让用户选择是否要消除C盘的碎片,可在AUTOEXEC.BAT文
件中加入下列语句:

    choice Defrag drive /ty,5
    if errorlevel 2 goto SkipDefrag
    defrag c:
    :SkipDefrag

    若在5秒内按下N,DEFRAG将不会运行,CHOICE返回ERRORLEVEL值为2。如果5秒
内没按下N,或选择了Y,则对C盘运行DEFRAG。

在批处理程序中使用CHOICE

    下面的批处理程序演示如何利用CHOICE选项,让用户选择执行三个程序之一:
MS-DOS编辑器、Microsoft Anti-virus或Microsoft Backup。

    注意,这里IF  ERRORLEVEL语句是按递减序列出的。如果由CHOICE返回
ERRORLEVEL参数的值大于或等于IF命令所指定的参数,MS-DOS将认为IF语句为真。

    @echo off
    cls
    echo.
    echo A   Microsoft Editor
    echo B   Microsoft Anti-Virus
    echo C   Microsoft Backup
    echo.
    choice /c:abc Choose an option
    if errorlevel 3 goto MSBackup
    if errorlevel 2 goto Msav
    if errorlevel 1 goto Edit

    :Edit
    edit
    goto End

    :Msav
    msav
    goto End

    :Msbackup
    msbackup
    goto End

    :End






熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-2-3 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
xiaojun
银牌会员





积分 2202
发帖 499
注册 2003-6-12
状态 离线
『第 13 楼』:  

请问:批处理为了不显示加了ctty nul 怎么会有错误的提示呢?
这1段:"choice Defrag drive /ty,5
    if errorlevel 2 goto SkipDefrag
    defrag c:
    :SkipDefrag "
/ty不能连写吧? 还是...可以这样写?





[此贴子已经被作者于2004-2-3 13:46:38编辑过]






一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


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

Re roy:

    我的意思是想办法只屏蔽非法按键,而非所有按键对倒计时的影响;即使用DEBUG修改CHOICE的拷贝也再所不惜。


[此贴子已经被作者于2004-2-3 13:17:02编辑过]






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

Batchinger


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

Re xiaojun:

    ctty 上文中已有所说明

  Quote:
不使用MS-DOS的程序与CTTY

    很多程序不用MS-DOS管理输入或输出。这些程序直接将输入送到计算机的硬
件。CTTY命令对这些程序不起作用。它只影响那些利用MS-DOS读输入和显示输
出的程序。

ctty nul即将系统输入输出权交给空设备,可屏蔽MS-DOS管理的一切输出,包括错误消息,你的情况可以具体说明一下吗?

    choice 默认使用Y,N作为应答选项,以上用法是正确的。

    KINGLION的文本取自MSDOS说明文档,有相当条理和权威,可以多从中学习学习。


[此贴子已经被作者于2004-2-3 13:30:00编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-2-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: