Board logo

标题: [其他] BAT输入多选时就闪退,怎么才完美解决呢? [打印本页]

作者: zhaofeng0420    时间: 2017-9-10 22:54     标题: BAT输入多选时就闪退,怎么才完美解决呢?

  1. :s
  2. cls
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. echo.
  6. echo;A. 广东       B. 江西       C. 湖北
  7. echo.
  8. set /p start=请选择:
  9. echo.
  10. if %start%==1 goto 1
  11. for %%a in (%start%) do call :%%a
  12. pause>nul&goto end
  13. :A
  14. echo;广东
  15. goto :eof
  16. :B
  17. echo;江西
  18. goto :eof
  19. :C
  20. echo;湖北
  21. goto :eof
  22. :1
  23. echo 您输入的是1,1234的1
  24. pause>nul&goto s
复制代码
输入多选时就闪退,如a,c
去掉if %start%==1 goto 1这一行,多选就没问题,怎么才完美解决呢?

作者: 老刘1号    时间: 2017-9-10 23:06

If "%start:"=""%" equ "1" goto 1
作者: /zhqsystem/zhq    时间: 2017-9-11 13:31

本帖最后由 /zhqsystem/zhq 于 2017-9-11 13:40 编辑

第14-16行部分代码为原问题错误解决方案
以下为建议代码循环,仅作参考
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call:s
  4. echo,调用完成
  5. pause
  6. exit
  7. :s
  8. cls
  9. echo.
  10. echo;A. 广东       B. 江西       C. 湖北
  11. echo.
  12. set /p start=输入NO退出死循环,输入exit退出:
  13. echo.
  14. if /i "%start%"=="no" goto:eof
  15. if /i "%start%"=="exit" exit
  16. if /i "%start%"=="1" call:1
  17. for %%a in (%start%) do call:%%a
  18. goto:s
  19. :A
  20. echo;广东
  21. goto:eof
  22. :B
  23. echo;江西
  24. goto:eof
  25. :C
  26. echo;湖北
  27. goto:eof
  28. :1
  29. echo 您输入的是1,1234的1
  30. ping /n 3 127.1 >nul
  31. goto:eof
复制代码

作者: 1055367558    时间: 2017-9-15 18:40

最好在前面if后面加个else。作为提示。。
@echo off
setlocal enabledelayedexpansion
call:s
echo,调用完成
pause
exit
:s
cls
echo.
echo;A. 广东       B. 江西       C. 湖北
echo.
set /p start=输入NO退出死循环,输入exit退出:
echo.
if /i "%start%"=="no" goto:eof
if /i "%start%"=="exit" exit
if /i "%start%"=="1" (call:1) else (echo 请输入正确字母&ping /n 3 127.1 >nul)
for %%a in (%start%) do call:%%a
goto:s
:A
echo;广东
goto:eof
:B
echo;江西
goto:eof
:C
echo;湖北
goto:eof
:1
echo 您输入的是1,1234的1
ping /n 3 127.1 >nul
goto:eof
而且感觉楼主代码有点繁杂和重复
作者: taofan712    时间: 2017-9-16 11:48

  1. @echo off
  2. set aa=A. 广东
  3. set bb=B. 江西
  4. set cc=C. 湖北
  5. :s
  6. cls
  7. echo;%aa%      %bb%       %cc%
  8. echo;&set /p start=请选择:
  9. if %start%==1 goto 1
  10. for /f "tokens=2 delims==" %%a in ('set^|find "%start%."') do echo;%%a
  11. pause>nul&goto s
  12. :1
  13. echo 您输入的是1,1234的1
  14. pause>nul&goto s
复制代码





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