标题: 批处理秘技 - 用choice指令作時間延遲
[打印本页]
作者: Roy
时间: 2003-8-16 00:00
标题: 批处理秘技 - 用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...
作者: iceboy
时间: 2003-8-16 00:00
如果在延时前加上 ctty nul,延时后加上 ctty con,那么延时中按 CTRL+C 就会死机.. 呵呵
作者: qjiang
时间: 2003-8-16 00:00
choice /c:!q /t:!,10 /n Press q to exit...其中的c:!q 什么意思那么/t:!,10中 !,又是什么意思了,能不能针对这个讲讲了
作者: xiaojun
时间: 2003-8-16 00:00
就是说在批处理前面用了这个指令后,在我运行bat文件后的前10秒后悔了,按q就退出它的运行了;是这样吗? 谢谢。
[此贴子已经被作者于2003-8-17 16:33:33编辑过]
作者: hotdog
时间: 2003-8-16 00:00
ctty是msdos里的吗
作者: xiaojun
时间: 2003-8-17 00:00
Quote: |
以下是引用xiaojun在2003-8-16 21:31:46的发言:
就是说在批处理前面用了这个指令后,在我运行bat文件后的前10秒后悔了,按q就退出它的运行了;是这样吗? 谢谢。
[此贴子已经被作者于2003-8-17 16:33:33编辑过] |
|
哪位大侠: 是不是这个意思啊?
作者: winddeity
时间: 2003-8-21 00:00
是外部命令吗?我的ms-dos7.1里怎么没有?
作者: willsort
时间: 2003-8-21 00:00
Re roy:
这个方法我从外文书中见到过,但是至今仍然解决不了书中指出的一个缺陷,即:按其它键后倒计时停止,不止Roy有什么办法?
作者: 下半辈子
时间: 2003-9-16 00:00
good
作者: roy
时间: 2004-2-2 00:00
Quote: |
以下是引用willsort在2003-8-21 16:21:44的发言:
Re roy:
这个方法我从外文书中见到过,但是至今仍然解决不了书中指出的一个缺陷,即:按其它键后倒计时停止,不止Roy有什么办法? |
|
用強制的吧...
作者: Kinglion
时间: 2004-2-3 00:00
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]
作者: Kinglion
时间: 2004-2-3 00:00
关于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
作者: xiaojun
时间: 2004-2-3 00:00
请问:批处理为了不显示加了ctty nul 怎么会有错误的提示呢?
这1段:"choice Defrag drive /ty,5
if errorlevel 2 goto SkipDefrag
defrag c:
:SkipDefrag "
/ty不能连写吧? 还是...可以这样写?
[此贴子已经被作者于2004-2-3 13:46:38编辑过]
作者: willsort
时间: 2004-2-3 00:00
Re roy:
我的意思是想办法只屏蔽非法按键,而非所有按键对倒计时的影响;即使用DEBUG修改CHOICE的拷贝也再所不惜。
[此贴子已经被作者于2004-2-3 13:17:02编辑过]
作者: willsort
时间: 2004-2-3 00:00
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编辑过]
作者: xiaojun
时间: 2004-2-3 00:00
是这样: 想屏避执行显示 , 免去bat中太多的的>nul和@echo off,用ctty nul在文首,屏上只有ctty nul和光标(ctty nul的本身如何屏避呢),内容是执行了,可全部都被屏避了,又怎么才能回提示符呢?
错误提示原来是我把批处理本身命名成了Ctty.bat,(纯dos); 呵呵...不过在XP的CMD有错误提示, 大概它是纯dos的命令吧... 多谢 !
作者: willsort
时间: 2004-2-3 00:00
Re xiaojun:
恢复显示使用:ctty con
作者: xiaojun
时间: 2004-2-3 00:00
哦 , 谢谢帮助,问题解决...!!!
[此贴子已经被作者于2004-2-3 19:37:10编辑过]
作者: roy
时间: 2004-2-3 00:00
Quote: |
以下是引用xiaojun在2004-2-3 14:10:21的发言:
是这样: 想屏避执行显示 , 免去bat中太多的的>nul和@echo off,用ctty nul在文首,屏上只有ctty nul和光标(ctty nul的本身如何屏避呢),内容是执行了,可全部都被屏避了,又怎么才能回提示符呢? |
|
用@CTTY NUL就行了
作者: 死性不改
时间: 2004-6-24 00:00
看看!學點東西!
作者: martin325
时间: 2006-2-27 09:26
@CTTY NUL可以屏蔽BAT执行时的屏显!
那么如何屏蔽config.sys加载程序时的屏显呢?
请教各位DOS高手了

作者: bagpipe
时间: 2006-2-27 10:36
看了各位在这里的讨论,学习了些东西,在WIN9X中作为一些设备和设备的驱动程序来说造成死机也是很早的漏洞了,在这里不妨说下,呵呵
CON、NUL、AUX、CLOCK$、CONFIG$
CON\NUL CON\CON NUL\NUL NUL\CON AUX\NUL 只要一执行,Win9X马上就会死机
CLOCK$ : System clock(系统时钟) CON : Console(控制台) AUX : COM1(串行口) NUL : Dummy Port(无效端口) CONFIG$ 这个我不是太清楚,请知道的告诉我一下,不过这个漏洞在NT系列的系统中没有了,好像这些设备的保留名造成的是溢出的漏洞,呵呵
作者: Scott0902
时间: 2006-2-27 17:05
Quote: |
Originally posted by Roy at 2003-8-16 00:00:
究極奧義!!強制延遲十秒!!
type nul|choice /c:! /t:!,10 /n Please wait for 10 seconds... |
|
哈哈,这个牛!
怎么这句话那么像圣斗士里面紫龙的话?(尝尝天龙星座能让庐山瀑布逆流的穷极奥义--庐山升龙霸!!!)
作者: jefflo
时间: 2007-12-2 15:41
尽量不使用外部命令