Board logo

标题: [其他] [已解决]批处理怎么实现按任意键退出,倒计时执行后面的代码? [打印本页]

作者: asdfghasdfgh    时间: 2011-1-25 16:33     标题: [已解决]批处理怎么实现按任意键退出,倒计时执行后面的代码?

怎么可以实现按任意键退出,倒计时执行后面的代码?坛子里的代码SET/P会影响后面的执行。
不用第三方命令。
1、有倒计时
2、在倒计时过程中可以按任意键退出
3、倒计时结束自动执行后面的代码
4、执行后面的代码时不再受按任意键退出的影响[]

[ 本帖最后由 asdfghasdfgh 于 2011-1-29 21:50 编辑 ]
作者: zcydez    时间: 2011-1-25 16:53

如果不用第三方……很难做到
至少我做不到
作者: liion631818    时间: 2011-1-25 17:06

给你一段本论坛的代码:
  1. @echo off
  2. if not "%1"=="" goto %1
  3. del "%temp%\#" 2>nul
  4. start /b %~fs0 :aa
  5. :agn
  6. set/p=按任意键退出...<nul&pause>nul
  7. >"%temp%\#" type nul
  8. exit
  9. :aa
  10. for /l %%a in (10 -1 1) do (
  11.    title 倒计时 %%a 秒后自动退出...
  12.    if exist "%temp%\#" (
  13.       del "%temp%\#"
  14.       exit
  15.    )
  16.    ping -n 2 127.1>nul
  17. )
  18. title 自动退出...
  19. for /f "tokens=2" %%a in ('tasklist /fi "windowtitle eq 自动退出..." /nh') do (
  20.    taskkill /f /pid %%a >nul
  21. )
  22. exit
复制代码
原帖http://www.bathome.net/redirect. ... amp;goto=nextnewset
作者: asdfghasdfgh    时间: 2011-1-25 17:09

原帖由 liion631818 于 2011-1-25 17:06 发表
给你一段本论坛的代码:@echo off
if not "%1"=="" goto %1
del "%temp%\#" 2>nul
start /b %~fs0 :aa
:agn
set/p=按任意键退出...nul
>"%temp%\#" type nul
exit
:aa
for /l %%a in (10 -1 1) do (
   ti ...


此代码用的SET/P,如果倒计时不是退出而是执行后面的代码,会出问题!
作者: tmplinshi    时间: 2011-1-26 01:34

  1. @echo off
  2. if "%~1"=="按任意键退出" goto :%1
  3. >"%temp%\.sub" cd.
  4. start "" /b %0 按任意键退出
  5. set 退格键=
  6. for /l %%a in (10 -1 1) do (
  7.     set /p =%退格键%%%a 秒后开始备份文件... [按任意键退出] <nul
  8.     if not exist "%temp%\.sub" exit
  9.     ping -n 2 127.1 >nul
  10. )
  11. echo,
  12. echo 备份完成。
  13. echo 按任意键退出...
  14. exit
  15. :按任意键退出
  16. pause >nul
  17. del "%temp%\.sub"
  18. exit
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-26 21:03 编辑 ]
作者: liion631818    时间: 2011-1-26 10:10

原帖由 tmplinshi 于 2011-1-26 01:34 发表
@echo off
if "%~1"=="按任意键退出" goto :%1

>"%temp%\.sub" cd.
start "" /b %0 按任意键退出
set 退格键=

for /l %%a in (10 -1 1) do (
    set /p =%退格 ...


厉害,这段代码确实好用,以前都没想到,学习了~~
作者: asdfghasdfgh    时间: 2011-1-26 12:35

原帖由 tmplinshi 于 2011-1-26 01:34 发表
@echo off
if "%~1"=="按任意键退出" goto :%1

>"%temp%\.sub" cd.
start "" /b %0 按任意键退出
set 退格键=

for /l %%a in (10 -1 1) do (
    set /p =%退格 ...


这个代码执行完了必须要按一下任意键才能退出,可否直接就退出呢?
作者: Batcher    时间: 2011-1-26 12:53     标题: 回复 7楼 的帖子

顶楼不是说要实现按任意键退出吗,怎么现在又变了?
作者: asdfghasdfgh    时间: 2011-1-26 13:18

原帖由 Batcher 于 2011-1-26 12:53 发表
顶楼不是说要实现按任意键退出吗,怎么现在又变了?


没有变,我再叙述一遍:
1、有倒计时
2、在倒计时过程中可以按任意键退出
3、倒计时结束自动执行后面的代码
4、执行后面的代码时不再受按任意键退出的影响

谢谢,可能是之前没表诉清楚。
作者: asdfghasdfgh    时间: 2011-1-26 19:50

自己顶一下 求解!!
作者: Batcher    时间: 2011-1-26 19:58     标题: 回复 9楼 的帖子

那就在顶楼重新表述一下吧
作者: tmplinshi    时间: 2011-1-26 20:14     标题: 回复 7楼 的帖子

  1. @echo off
  2. if "%~1"=="按任意键退出" goto :%1
  3. >"%temp%\.sub" cd.
  4. start "" /b %0 按任意键退出
  5. set 退格键=
  6. for /l %%a in (10 -1 1) do (
  7.     set /p =%退格键%%%a 秒后开始备份文件... [按任意键退出] <nul
  8.     if not exist "%temp%\.sub" exit
  9.     ping -n 2 127.1 >nul
  10. )
  11. echo,
  12. echo 备份完成。
  13. del "%temp%\.sub"
  14. title 正在退出...
  15. taskkill /im cmd.exe /fi "windowtitle eq 正在退出..."
  16. :按任意键退出
  17. pause >nul
  18. del "%temp%\.sub"
  19. exit
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-26 20:29 编辑 ]
作者: wc726842270    时间: 2011-1-27 03:04

版主的退格符用的真是巧秒啊,学习了
作者: acaigg    时间: 2011-1-28 13:36

学习一下,顶一下,增加人气。
作者: asdfghasdfgh    时间: 2011-1-29 21:52

自己对代码的不熟悉,其实在大家的帮助下问题早就解决,谢谢各位!
作者: WecanHuang    时间: 2011-2-22 23:20

原帖由 tmplinshi 于 2011-1-26 20:14 发表
@echo off
if "%~1"=="按任意键退出" goto :%1

>"%temp%\.sub" cd.
start "" /b %0 按任意键退出
set 退格键=

for /l %%a in (10 -1 1) do (
    set /p =%退格 ...


太高深了
有人能给我讲下这段吗?
for /l %%a in (10 -1 1) do (
    set /p =%退格键%%%a 秒后开始备份文件... [按任意键退出] <nul
    if not exist "%temp%\.sub" exit
    ping -n 2 127.1 >nul
)
我一直没弄明白"%temp%\.sub"这个文件怎么会一按下键盘就消失的
作者: WecanHuang    时间: 2011-2-22 23:55

呵呵
厉害
大概看懂了
牛b
作者: acaigg    时间: 2011-4-6 16:01

pause 这个用的很好!!!
作者: CrLf    时间: 2011-4-6 16:41

那段代码的关键不在退格符或者for什么的,而在于start /b,借此实现单窗口双进程,并用临时文件互通有无,这构思的确精彩绝伦
作者: acaigg    时间: 2011-4-6 20:00

此代码用的SET/P,如果倒计时不是退出而是执行后面的代码,会出问题!
asdfghasdfgh 发表于 2011-1-25 17:09

请问楼主,如果倒计时不是退出而是执行后面的代码,会出什么问题!
  1. @echo off
  2. if not "%1"=="" goto %1
  3. del "%temp%\#" 2>nul
  4. start /b %~fs0 :aa
  5. :agn
  6. set/p=按任意键退出...<nul&pause>nul
  7. >"%temp%\#" type nul
  8. exit
  9. :aa
  10. for /l %%a in (10 -1 1) do (
  11.    title 倒计时 %%a 秒后自动退出...
  12.    if exist "%temp%\#" (
  13.       del "%temp%\#"
  14.       exit
  15.    )
  16.    ping -n 2 127.1>nul
  17. )
  18. title Windows2000
  19. color 1f
  20. mode con lines=10
  21. set work=0
  22. set n=0
  23. set mo=0
  24. set number=0
  25. set all=60
  26. set time=%all%
  27. :show
  28. :check
  29. if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check
  30. :2
  31. cls
  32. echo  进度: %n% / %all%                                          剩余时间:%time%秒
  33. echo.
  34. echo.
  35. echo                                  完成 %work% %%%
  36. echo.
  37. if not "%num%"=="" echo       %num%
  38. if not "%num%"=="" echo       %num%
  39. if %work%==100 goto end
  40. ping 127.1 -n 1 >nul
  41. set /a n=%n%+1
  42. set /a time=%all%-%n%
  43. set /a work=(%n%)*100/(%all%)
  44. set /a number=%work%/3
  45. set /a number=%number%+1
  46. goto show
  47. endlocal
  48. :end
  49. title 正在退出...
  50. taskkill /im cmd.exe /fi "windowtitle eq 正在退出..."
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2