Board logo

标题: [文本处理] 批处理中 回车键的问题 [打印本页]

作者: joannec    时间: 2014-10-4 00:28     标题: 批处理中 回车键的问题

  1. set /P test=" 1 xx,2 xxx :"
  2. IF /I %test%==1 goto next
  3. IF /I %test%==2 goto next2
复制代码
比如这个批处理,有两个问题请教下,

1  .  要选2,那按2就行,想问的是要怎么实现选1不要按1,按回车就代表选1呢,这个要怎么写,

2 .   还有一个问题是,比如选2,输入2以后要回车一下,要怎么实现输入2 ,不用按回车键就自动跳到 2 设定的指令,
作者: xxpinqz    时间: 2014-10-4 01:06

貌似难了点,1与2不可兼得,当然泛指我这水平。
作者: joannec    时间: 2014-10-4 01:11

回复 2# xxpinqz

不敢强求同时实现,实现其中一个也行哈,,
作者: xxpinqz    时间: 2014-10-4 01:16

回车默认1
  1. @echo off
  2. set "test=1"
  3. set /P test=" 1 xx,2 xxx :"
  4. IF /I %test%==1 goto next
  5. IF /I %test%==2 goto next2
复制代码

作者: joannec    时间: 2014-10-4 01:21

回复 4# xxpinqz

恩,,就是它了,,谢谢哥们哈,,
作者: joannec    时间: 2014-10-4 01:26

回复 4# xxpinqz

哥们,,再请教下第2个能实现吗,,我不放在一起用,
作者: xxpinqz    时间: 2014-10-4 01:30

本帖最后由 xxpinqz 于 2014-10-4 01:32 编辑

回复 6# joannec


    最简单的:
  1. @echo off
  2. choice /c 12 /m " 1 xx,2 xxx :"
  3. if %ERRORLEVEL%==1 goto next
  4. if %ERRORLEVEL%==2 goto next2
复制代码
应该是这么写吧,脑袋混乱中。。。,通用性不好,有些系统没choice

http://www.bathome.net/thread-1726-1-1.html
作者: joannec    时间: 2014-10-4 02:40

回复 7# xxpinqz

搞定啦,,谢谢了,,你真是太谦虚了哈,,
作者: CrLf    时间: 2014-10-4 09:45

本帖最后由 CrLf 于 2014-10-4 09:50 编辑

回复 7# xxpinqz


提供三个代替 choice 的方案,你一定会对第一个办法感兴趣:

1、sc+findstr 模拟 choice,在 win7 下通过测试:
  1. @echo off
  2. set "test=1"
  3. for /f "delims=" %%a in ('sc ^| findstr /x .') do set test=%%a
  4. ::win7 测试发现 findstr /v $ 也有相同效果,但无法理解为什么能读到 y
  5. echo test=%test%
  6. pause
  7. ::借鉴自 http://bbs.bathome.net/redirect.php?goto=findpost&ptid=13558&pid=116141
复制代码
2、ascode 生成 choice.com:
  1. @echo off&chcp 437|graftabl 936 >nul
  2. (echo RQPUWP]UZV_BBBB5``PY(E.(E3^)E5^)E:(E^>^)EFSX3CH^<P}pE^< ~r%%ooQRY2AY0@G uG0EGB?
  3. echo KO00O0KNX01K91200JMJKN2OLN9J8NNKO0001KNp01K93030JMJKN2OLKN0001_]XYZN9N810
  4. echo;K408LM2188L2KN8200JL38M0t083L0MK000t06NKO389O02L82K44LLM21
  5. )>"choice.com"
  6. ::这个 bat 是生成 "choice.com" 的模板,使用时可以直接复制
  7. choice.com 12
  8. if errorlevel 3 goto enter
  9. if errorlevel 2 goto 2
  10. if errorlevel 1 goto 1
  11. if errorlevel 0 goto error
  12. :: 下略...
  13. ::由 http://bbs.bathome.net/viewthread.php?tid=21888 算法生成
复制代码
3、powershell 调用 .net 的 console 类:
  1. [console]::readkey()
复制代码
使用第三方的办法就不提了...
作者: DAIC    时间: 2014-10-4 11:02

回复 9# CrLf


    Win7直接使用choice多好啊
作者: joannec    时间: 2014-10-4 13:40

回复 9# CrLf

谢谢,,第一个不错,正在研究哈
第2个,好像win764 不兼容,
作者: CrLf    时间: 2014-10-4 22:16

回复 10# DAIC


    各有利弊吧~choice 不能实现撸主要求的按回车则默认选 1
作者: CrLf    时间: 2014-10-4 22:17

回复 11# joannec


    第二个是用 16 位程序实现的,64 位 windows 系统已放弃对 16 位的支持
作者: terse    时间: 2014-10-4 23:11

同样不支持 64 位
  1. @echo off
  2. >nul (chcp 437&graftabl 936)
  3. echo "1,2,3"
  4. (echo e100 CD 16 B4 4C CD 21&echo g&echo q)|debug>nul
  5. cmd /c exit /b %errorlevel%
  6. if "%=ExitCodeAscii%" == "2" goto :2
  7. :1
  8. echo 1
  9. goto end
  10. :2
  11. echo 2
  12. :end
  13. pause
复制代码

作者: CrLf    时间: 2014-10-5 00:11

回复 14# terse


    森马,int 16 这么方便




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