标题: 【原创】timeout函数 纯批实现等待按键响应|指定输入
[打印本页]
作者: jvive
时间: 2008-4-26 18:52
标题: 【原创】timeout函数 纯批实现等待按键响应|指定输入
等待按键响应:@echo off&if not "%1"=="" call%*&exit||{Jvive@cn-dos.net|08-4-26}
::纯批实现等待按键响应
:begin
call:timeout 8 :tsk1
:tsk1
echo msgbox "默认计划2">%tmp%\'.vbs
start %tmp%\'.vbs
echo 按回车键退出
exit
:: /*---------------timeout----------------------
:timeout [num] [:label]
del/a/q %tmp%\' 2>nul||(echo 未知错误!&pause&exit)
start/b/REALTIME %~s0 :timeout_1 %1 %2
pause>nul
if exist %tmp%\' exit ::没有按键,退出timeout
title %ComSpec%&cd.>%tmp%\'&goto%2
:timeout_1 [num] [:label]
for /l %%a in (%1 -1 0)do (
title 倒计时:%%a /任意键跳过.../
if exist %tmp%\' title %ComSpec%&exit
ping/n 2 127.1 >nul)
title %ComSpec%&cd.>%tmp%\'&goto%2
:: /*--------------- timeout ---------------------*/
等待指定输入:@echo off&if not "%1"=="" call%*&exit||{Jvive@cn-dos.net|08-4-26}
::纯批实现等待指定输入
:begin
call:timeout 5 :tsk1 626 :tsk2
:tsk1
echo msgbox "默认计划">%tmp%\'.vbs
start %tmp%\'.vbs
echo\&echo 按回车键退出
exit
:tsk2
echo msgbox "自定义计划">%tmp%\'.vbs
start %tmp%\'.vbs
exit
:: /*----------------- timeout --------------------
:timeout [num] [:label1] [STR] [:LABEL2]
setlocal&del/a/q %tmp%\' 2>nul||(echo 未知错误!&pause&exit)
start/b/REALTIME %~s0 :timeout_1 %1 %2 %3 %4
:timeout_2
set "v="
set/p v=
if %v%.==%3. title %ComSpec%&cd.>%tmp%\'&endlocal&goto%4
if exist %tmp%\' exit ::没有输入,退出timeout
goto:timeout_2
:timeout_1 [num] [:label1] [STR] [:LABEL2]
for /l %%a in (%1 -1 0)do (
title 倒计时:%%a /输入:%3 跳过默认计划 %2/
if exist %tmp%\' title %ComSpec%&exit
ping/n 2 127.1 >nul)
title %ComSpec%&cd.>%tmp%\'&goto%2
:: /*------------------ timeout -------------------*/
思路: Quote: |
一个进程"pause"(实际上它还是处于执行态只是执行pause命令暂停罢了),另一个进程处于执行状态,若当这个进程变为也pause时,那么,不管这个进程的优先级有多高,按键输入只会响应第一个执行pause的进程, |
|
[
Last edited by jvive on 2008-4-30 at 09:05 AM ]
作者: slore
时间: 2008-4-26 19:02
看到……'.vbs
对楼主的标题实在……
作者: jvive
时间: 2008-4-26 19:31
Quote: |
Originally posted by slore at 2008-4-26 07:02 PM:
看到……'.vbs
对楼主的标题实在…… |
|
那个'vbs只是为了弹出对话框醒目罢了,你可能对这个timeout子过程有所不知
现在换成
echo 直接显示也可以啊,下面的代码没有任何有关vbs的东西:
等待按键响应@echo off&if not "%1"=="" call%*&exit||{jvive@cn-dos.net|08-4-26}
::纯批实现等待按键响应
:begin
call:timeout 3 :tsk1
:tsk1
echo\&echo "默认计划"
if defined + (echo\&echo 按回车键退出) else pause
exit
:: /*---------------timeout----------------------
:timeout [num] [:label]
del/a/q %tmp%\' 2>nul||(echo 未知错误!&pause&exit)
start/b/REALTIME %~s0 :timeout_1 %1 %2
pause>nul
if exist %tmp%\' exit ::没有按键,退出timeout
title %ComSpec%&cd.>%tmp%\'&goto%2
:timeout_1 [num] [:label]
for /l %%a in (%1 -1 0)do (
title 倒计时:%%a /任意键跳过.../
if exist %tmp%\' title %ComSpec%&exit
ping/n 2 127.1 >nul)
title %ComSpec%&cd.>%tmp%\'&set +=0&goto%2
:: /*--------------- timeout ---------------------*/
等待指定输入@echo off&if not "%1"=="" call%*&exit||{jvive@cn-dos.net|08-4-26}
::纯批实现等待指定输入
:begin
call:timeout 5 :tsk1 626 :tsk2
:tsk1
echo\&echo "默认计划"
echo\&echo 按回车键退出
exit
:tsk2
echo "自定义计划"
pause
exit
:: /*----------------- timeout --------------------
:timeout [num] [:label1] [STR] [:LABEL2]
setlocal&del/a/q %tmp%\' 2>nul||(echo 未知错误!&pause&exit)
start/b/REALTIME %~s0 :timeout_1 %1 %2 %3 %4
:timeout_2
set "v="
set/p v=
if %v%.==%3. title %ComSpec%&cd.>%tmp%\'&endlocal&goto%4
if exist %tmp%\' exit ::没有输入,退出timeout
goto:timeout_2
:timeout_1 [num] [:label1] [STR] [:LABEL2]
for /l %%a in (%1 -1 0)do (
title 倒计时:%%a /输入:%3 跳过默认计划 %2/
if exist %tmp%\' title %ComSpec%&exit
ping/n 2 127.1 >nul)
title %ComSpec%&cd.>%tmp%\'&goto%2
:: /*------------------ timeout -------------------*/
[
Last edited by jvive on 2008-4-26 at 07:44 PM ]
作者: s11ss
时间: 2008-4-26 19:55
call%*
这个干嘛用的?
作者: jvive
时间: 2008-4-26 20:00
Quote: |
Originally posted by s11ss at 2008-4-26 07:55 PM:
call%*
这个干嘛用的? |
|
你看这个代码就理解了:
隐藏"调用":@echo off&if not %1.==. call%*&exit
::原帖请搜索借尸还魂
pause
goto:hid
:code
set set1=ping -n 2 127.1 1^>nul 2^>nul
for /l %%i in (1 1 5) do md test-%%i&%set1%
for /l %%i in (5 -1 1) do rd test-%%i&%set1%
msg %username% /v /w "~~~~~测试完毕,点确定退出cmd~~~~"
exit
:: /*-------- hideme ----------
:hid
if not %1.==. (goto:code) else mshta vbscript:createobject("wscript.shell").run("%~s0 :hid 0",0)(window.close)&exit
:: -------- hideme ----------*/
作者: s11ss
时间: 2008-4-26 20:08
@echo off&if not %1.==. call%*&exit
这样不行么:
@echo off&if not %1.==. exit
作者: jvive
时间: 2008-4-26 20:16
Quote: |
Originally posted by s11ss at 2008-4-26 08:08 PM:
@echo off&if not %1.==. call%*&exit
这样不行么:
@echo off&if not %1.==. exit |
|
不可以。
这个%*,包含了%1,....若干个参数,
上面的代码%1都表示标签,程序会跳动到标签处执行相应的代码,
所以call%*万万不可以省略,根据情况exit 却可以省去。
-------------- 已更正。
[
Last edited by jvive on 2008-4-26 at 08:28 PM ]
作者: abcd
时间: 2008-4-26 20:19
%*不包括%0
%*代表参数
%0不是参数
作者: jvive
时间: 2008-4-26 20:27
s11ss兄,
我的疏忽,%*的确不包含%0,
-------------------
abcd兄,
但我们可以把%0当作参数使用,
@echo off
call:abcd j v i v e
exit
:abcd
echo %0 %1 %2 %3 %4 %5
pause
goto:eof
作者: s11ss
时间: 2008-4-26 20:44
Quote: |
Originally posted by plp626 at 2008-4-26 08:40 PM:
到现在我还不是很肯定start/b启动的叫线程还是叫进程。 |
|
进程——多了一个cmd.exe。
作者: slore
时间: 2008-4-26 21:01
Quote: |
Originally posted by plp626 at 2008-4-26 20:40:
我就晕了,这个帖子主要是想与大家讨论多进程,怎么就没有感觉哪,让人有点失望啊,
我发过一个多进程的求助帖子,就是两个cmd 直接进行“对 ... |
|
要对话需要消息……而BAT的话,是不能……
我用的是注册表嗬,不是直观的临时文件吧。
反正。。。呵呵,纯P就不要想了……
作者: slore
时间: 2008-4-26 21:16
不好意思,没有仔细看……因为对这种效果还不知道有啥具体合适的应用嗬,还是喜欢……谁方便好用谁用的原则嗬。
作者: slore
时间: 2008-4-26 21:31
timeout不就是个进程了。。。
如果纯P可以貌似那个就没有人写拉。我也没有用过。。。
我还没有发觉自己要用那个功能。。。
作者: xxymg
时间: 2008-5-10 12:48
呵呵 学习 高兴哦