找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22261|回复: 6

[系统相关] 怎样避免键盘缓存导致批处理执行错误?

[复制链接]
发表于 2011-10-31 00:30:12 | 显示全部楼层 |阅读模式
试写一段简单的光盘内导航批处理,运行中一些选择执行后会留下键盘记录,导致再次执行相同快捷键的选项时跳转错误。
  1. @echo off

  2. :Head
  3. echo/
  4. echo 浏览光盘 [B]
  5. echo 使用须知 [N]      ←快捷键“N”第一次使用
  6. echo 退出操作 [E]
  7. echo/
  8. set /p input=请选择所需要的栏目:
  9. if /i "%input%" == "b" goto Browse
  10. if /i "%input%" == "n" goto Notice          ←检测按键是否为“N”
  11. if /i "%input%" == "e" goto Escape
  12. goto head

  13. :Notice
  14. cls
  15. title 内容说明
  16. echo/
  17. echo 目录中的软件皆为免安装绿色软件,请自行选择安装。
  18. echo/
  19. set/p input=是否明白?[ Y / N ]:                   ←问题从这里开始,第一次的快捷键“N”又在这里使用了。
  20. if /i "%input%" == "y" goto Head
  21. if /i "%input%" == "n" goto Escape           ←跟主菜单一样的快捷键“N”,要是按“N”没问题,但是在不按任何字母键的情况下,直接按回车的话就跳到Escape中执行退出,这是键盘缓存的问题所在。
  22. goto Notice

  23. :Escape
  24. cls
  25. echo/
  26. echo =============================================================================
  27. echo/
  28. echo                                 正在弹出光盘
  29. echo/
  30. echo =============================================================================
  31. start mshta "javascript:with (new ActiveXObject('WMPlayer.OCX').cdromCollection.Item(0)){Eject();};window.close();"
  32. ping -n 2 0 >nul
  33. taskkill /im mshta.exe /f>nul
  34. exit
复制代码
主菜单 Head 的内容
echo 使用须知 [N]          ←快捷键“N”第一次使用
if /i "%input%" == "n" goto Notice          ←检测按键是否为“N”

内容说明 Notice 的内容
set/p input=是否明白?[ Y / N ]:                   ←问题从这里开始,第一次的快捷键“N”又在这里使用了。
if /i "%input%" == "n" goto Escape           ←跟主菜单一样的快捷键“N”,要是按“N”没问题,但是在不按任何字母键的情况下,直接按回车的话就跳到Escape中执行退出,这是键盘缓存的问题所在。

请问高手们,有没有办法可以让批处理自己清空键盘缓存,有哪些Dos命令或者Vbs可以达到效果?
假如内部指令没法完成键盘缓存的清空,是否只能定义不同快捷键的选项?
发表于 2011-10-31 10:07:40 | 显示全部楼层
分别用两个变量来保存用户的输入:
MenuInput
ConfirmInput
发表于 2011-10-31 10:49:05 | 显示全部楼层
  1. set/p input=是否明白?[ Y / N ]:                   ←问题从这里开始,第一次的快捷键“N”又在这里使用了。
复制代码
在这句之前加上一句
  1. set input=
复制代码
 楼主| 发表于 2011-10-31 10:57:51 | 显示全部楼层
分别用两个变量来保存用户的输入:
MenuInput
ConfirmInput
awk 发表于 2011-10-31 10:07



    我居然想不到换这样的方法,真是钻进牛角尖了。  

还想请教一个问题,我在Escape那段写了个弹出光盘的指令,但是弹出之后会报出请插入光盘的对话框,似乎退出之后光盘里的这个批处理没法继续执行了。
有没有办法,让它不报错,在弹出光盘之后能继续完成关闭光驱的步骤
  1. :Escape

  2. color c
  3. cls
  4. echo/
  5. echo =============================================================================
  6. echo/
  7. echo                                 正在弹出光盘
  8. echo/
  9. echo =============================================================================
  10. start mshta "javascript:with (new ActiveXObject('WMPlayer.OCX').cdromCollection.Item(0)){Eject();};window.close();"
  11. ping -n 2 0 >nul
  12. taskkill /im mshta.exe /f>nul
  13. cls
  14. echo/
  15. echo =============================================================================
  16. echo/
  17. echo                               请取出光盘
  18. echo/
  19. echo =============================================================================
  20. ping -n 5 0 >nul
  21. cls
  22. echo/
  23. echo =============================================================================
  24. echo/
  25. echo                              正在关闭光驱
  26. echo/
  27. echo =============================================================================
  28. start mshta "javascript:with (new ActiveXObject('WMPlayer.OCX').cdromCollection.Item(0)){Eject();Eject();};window.close();"
  29. ping -n 2 0 >nul
  30. taskkill /im mshta.exe /f>nul
  31. exit
复制代码
 楼主| 发表于 2011-10-31 11:11:11 | 显示全部楼层
本帖最后由 Endnext 于 2011-10-31 11:47 编辑

回复 3# 601997526


    好办法,这样变量赋值就为空了。谢谢!
发表于 2011-10-31 11:50:19 | 显示全部楼层
本帖最后由 601997526 于 2011-10-31 11:53 编辑
还想请教一个问题,我在Escape那段写了个弹出光盘的指令,但是弹出之后会报出请插入光盘的对话框,似乎退出之后光盘里的这个批处理没法继续执行了。
Endnext 发表于 2011-10-31 10:57


LZ可以考虑先copy代码至其它位置再执行
 楼主| 发表于 2011-10-31 14:17:04 | 显示全部楼层
本帖最后由 Endnext 于 2011-10-31 14:22 编辑

回复 6# 601997526


    批处理生成批处理应该怎样写?
    我是想将Escape先写在导航的批处理里面,当光盘自动运行之后,首先将Escape在C盘的Temp文件夹重新生成一个独立的Bat文件,然后当执行退出的时候调用这个外部批处理,完成退出之个Temp文件夹的Escape批处理文件进行自毁操作



在这句之前加上一句
601997526 发表于 2011-10-31 10:49



    我运行失败的原因是,"set input="这句话中,“input”和“=”之间使用了空格,后来改回来就成功了,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:23 , Processed in 0.021111 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表