[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

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

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

例:

choice /c 123456 /m 提示信息


其结果变量以然是 %errorlevel%

即可以 echo %errorlevel%
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
我来学习。

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
复制代码
1

评分人数

TOP

1、choice不是内部命令
2、Vista和Win7有choice但是XP没有
1

评分人数

    • CrLf: 乐于助人PB + 5

TOP

回复 3# CUer


    同样的问题,能否不用choice实现?因为xp中没有choice命令

TOP

回复 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

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

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

评分人数

    • CrLf: 学习了技术 + 1

TOP

回复 7# plp626


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

TOP

  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
复制代码

TOP

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

@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)

TOP

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

TOP

返回列表