Board logo

标题: [已解决]批处理set /p 有无办法只限定输入一个字符后自动回车? [打印本页]

作者: xjiain    时间: 2011-8-5 22:50     标题: [已解决]批处理set /p 有无办法只限定输入一个字符后自动回车?

set /p 有无办法只限定输入一个字符后自动回车。。

比如,输入一个a后,自动回车,赋值,继续往下执行。

谢谢2楼的朋友提供的帮助,这么一个内部命令 choice 轻松解决了。也无需再用第三方工具CKEY。

打开CMD窗口。键入 choice /? 就能看到中文说明。

例:

choice /c 123456 /m 提示信息


其结果变量以然是 %errorlevel%

即可以 echo %errorlevel%
作者: Hello123World    时间: 2011-8-9 14:50

set不行,choice可以实现,不过choice后一定要跟goto。
  1. @echo off
  2. choice /c:yn /m:"其输入y or n"
  3. if Errorlevel 2 goto n
  4. If ErrorLevel 1 goto y
  5. exit
  6. :y
  7. echo 输入的是y
  8. pause>nul & exit
  9. :n
  10. echo 输入的是n
  11. pause>nul
复制代码

作者: CUer    时间: 2011-8-12 14:00

1、choice不是内部命令
2、Vista和Win7有choice但是XP没有
作者: wnsdt    时间: 2012-9-2 11:25

回复 3# CUer


    同样的问题,能否不用choice实现?因为xp中没有choice命令
作者: CrLf    时间: 2012-9-2 18:18

回复 4# wnsdt


    生成一个 com...
  1. @echo off
  2. more +5 %0|debug asc.com>nul
  3. asc
  4. echo 您输入的字符内码为 %errorlevel%
  5. pause
  6. a
  7. mov ah,8
  8. int 21
  9. mov ah,4c
  10. int 21
  11. rcx
  12. 8
  13. w
  14. q
复制代码

作者: CrLf    时间: 2012-9-2 19:14

本帖最后由 CrLf 于 2012-9-2 22:50 编辑

来个更像 choice 的
  1. @echo off&chcp 437|graftabl 936 >nul
  2. more +6 %0|debug test.com>nul
  3. echo 请输入 a b c 其中之一,将在退出码中返回用户输入在参数中的位置,若找不到则为 0
  4. test.com abc
  5. echo %errorlevel%
  6. pause
  7. a
  8. mov ah,8
  9. int 21     ;取输入
  10. mov dl,al
  11. mov si,82    ;参数指针
  12. ;loop:
  13. lodsb
  14. cmp al,dl
  15. jz 116    ;goto out:
  16. cmp al,d
  17. mov al,0
  18. jz 11a    ;goto end:
  19. jmp 109    ;goto loop:
  20. ;out:
  21. mov ax,si
  22. sub al,82
  23. ;end:
  24. mov ah,4c
  25. int 21
  26. rcx
  27. 1e
  28. w
  29. q
复制代码

作者: plp626    时间: 2012-9-2 20:54

本帖最后由 plp626 于 2012-9-2 20:56 编辑

以前在cn-dos收藏的一个SC方法:
  1. @sc | find /v /c ""
  2. @pause
复制代码
输入y, 与其他字符 结果不同。。
楼主可根据需要自己定制。。
作者: CrLf    时间: 2012-9-2 22:49

回复 7# plp626


    哈,好办法,不过这里的 find 好像没有意义啊,是否是:
  1. @sc|findstr /x "."
复制代码

作者: plp626    时间: 2012-9-3 09:25

  1. @ECHO off
  2. for /f %%a in ('sc /?^|find /c /v ""')do if %%a gtr 45 goto:y
  3. echo 没有输入y
  4. pause
  5. exit
  6. :y
  7. echo 输入了y
  8. pause
  9. exit
复制代码

作者: 路过    时间: 2012-11-3 23:14

::这个吧  还可以限定时间

@echo off
title 自动输入字符
if "%1" equ "?" (ping/n 4 127.0>nul
call :rcx
ping/n 1 127.0>nul
exit)
start /b %~s0 ?
set /p d=    请在3秒内输入:否则自动输入
echo;%d%
pause

:rcx
start /b mshta vbscript:CreateObject("Wscript.Shell").SendKeys("a")(window.close)
start /b mshta vbscript:CreateObject("Wscript.Shell").SendKeys("{Enter}")(window.close)
作者: 路过    时间: 2012-11-3 23:16

运行两次
call :rcx
ping/n 1 127.0>nul
也可以




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