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

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

[复制链接]
发表于 2011-8-5 22:50:00 | 显示全部楼层 |阅读模式
set /p 有无办法只限定输入一个字符后自动回车。。

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

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

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

例:

choice /c 123456 /m 提示信息


其结果变量以然是 %errorlevel%

即可以 echo %errorlevel%

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-9 14:50:37 | 显示全部楼层
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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-8-12 14:00:31 | 显示全部楼层
1、choice不是内部命令
2、Vista和Win7有choice但是XP没有

评分

参与人数 1PB +5 收起 理由
CrLf + 5 乐于助人

查看全部评分

发表于 2012-9-2 11:25:21 | 显示全部楼层
回复 3# CUer


    同样的问题,能否不用choice实现?因为xp中没有choice命令
发表于 2012-9-2 18:18:05 | 显示全部楼层
回复 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
复制代码
发表于 2012-9-2 19:14:09 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2012-9-2 20:54:16 | 显示全部楼层
本帖最后由 plp626 于 2012-9-2 20:56 编辑

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

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 学习了

查看全部评分

发表于 2012-9-2 22:49:53 | 显示全部楼层
回复 7# plp626


    哈,好办法,不过这里的 find 好像没有意义啊,是否是:
  1. @sc|findstr /x "."
复制代码
发表于 2012-9-3 09:25:27 | 显示全部楼层
  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:55 | 显示全部楼层
::这个吧  还可以限定时间

@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:16 | 显示全部楼层
运行两次
call :rcx
ping/n 1 127.0>nul
也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 16:34 , Processed in 0.023255 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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