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

[文件操作] [已解决]批处理文件连续使用 set /p + if 为何失败?

看代码
  1. @echo off
  2. :mode
  3. set /p path=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
  4. echo %path%|findstr /ix "[1-3]" >nul||(
  5.   echo 输入错误,按任意键重新选择 ...&pause>nul&goto Mode
  6. )
  7. if "%path%"=="1" goto 直接引导
  8. if "%path%"=="2" (
  9.    set /p k1=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
  10. )
  11.    if "%k1%"=="1" goto ldr
  12.    if "%k1%"=="2" goto iso
  13.    if "%k1%"=="3" goto wim
  14. if "%path%"=="3" (
  15.    set /p k2=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
  16. )
  17.    if "%k2%"=="1" goto ldr
  18.    if "%k2%"=="2" goto grub
  19.    if "%k2%"=="3" goto iso
  20.    if "%k2%"=="4" goto wim
  21. goto mode
  22. :ldr
  23. echo.Here is ldr!!!
  24. pause
  25. exit
  26. :iso
  27. echo.Here is iso!!!
  28. pause
  29. exit
  30. :wim
  31. echo.Here is wim!!!
  32. pause
  33. exit
  34. :grub
  35. echo.Here is Grub!!!
  36. pause
  37. exit
  38. :直接引导
  39. echo.Here is 直接引导!!!
  40. pause
  41. exit
复制代码
输入 1 2 3,均自动退出,这代码肯定有问题,请老师们给看看?
谢谢!

突然想到,是不是不能用 %path%(本身是系统变量吧?),改成 M 后,输入1和2可成功跳转,但输入3 依然会自动退出。

TOP

  1. @echo off
  2. :mode
  3. set inputBoot=
  4. set inputGrub=
  5. set inputBcd=
  6. set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
  7. echo %inputBoot%|findstr /ix "[1-3]" >nul||(
  8.   echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot
  9. )
  10. if "%inputBoot%"=="1" goto 直接引导
  11. if "%inputBoot%"=="2" (
  12.    set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
  13.    if "%inputGrub%"=="1" goto ldr
  14.    if "%inputGrub%"=="2" goto iso
  15.    if "%inputGrub%"=="3" goto wim
  16. )
  17. if "%inputBoot%"=="3" (
  18.    set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
  19.    if "%inputBcd%"=="1" goto ldr
  20.    if "%inputBcd%"=="2" goto grub
  21.    if "%inputBcd%"=="3" goto iso
  22.    if "%inputBcd%"=="4" goto wim
  23. )
  24. goto mode
  25. :ldr
  26. echo.Here is ldr!!!
  27. pause
  28. exit
  29. :iso
  30. echo.Here is iso!!!
  31. pause
  32. exit
  33. :wim
  34. echo.Here is wim!!!
  35. pause
  36. exit
  37. :grub
  38. echo.Here is Grub!!!
  39. pause
  40. exit
  41. :直接引导
  42. echo.Here is 直接引导!!!
  43. pause
  44. exit
复制代码

TOP

回复 1# yuanyannian


    除了%path%外,第6行FilePath标签没指定,要是输入1-3之外的字符就会报错。

TOP

find 发表于 2012-3-3 22:37


谢谢老大!

inputBoot= 可通过,

inputGrub=

inputBcd=

进一步选择失败?

TOP

回复 5# yuanyannian


报错信息是什么?

TOP

本帖最后由 yuanyannian 于 2012-3-3 23:06 编辑
find 发表于 2012-3-3 22:37



原谅我的网速如牛。

    inputGrub=
    和
    inputBcd=

   直接退出。

TOP

回复 7# yuanyannian
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :mode
  4. set inputBoot=
  5. set inputGrub=
  6. set inputBcd=
  7. set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
  8. echo %inputBoot%|findstr /ix "[1-3]" >nul||(
  9.   echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot
  10. )
  11. if "%inputBoot%"=="1" goto 直接引导
  12. if "%inputBoot%"=="2" (
  13.    set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
  14.    if "!inputGrub!"=="1" goto ldr
  15.    if "!inputGrub!"=="2" goto iso
  16.    if "!inputGrub!"=="3" goto wim
  17. )
  18. if "%inputBoot%"=="3" (
  19.    set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
  20.    if "!inputBcd!"=="1" goto ldr
  21.    if "!inputBcd!"=="2" goto grub
  22.    if "!inputBcd!"=="3" goto iso
  23.    if "!inputBcd!"=="4" goto wim
  24. )
  25. goto mode
  26. :ldr
  27. echo.Here is ldr!!!
  28. pause
  29. goto :eof
  30. :iso
  31. echo.Here is iso!!!
  32. pause
  33. goto :eof
  34. :wim
  35. echo.Here is wim!!!
  36. pause
  37. goto :eof
  38. :grub
  39. echo.Here is Grub!!!
  40. pause
  41. goto :eof
  42. :直接引导
  43. echo.Here is 直接引导!!!
  44. pause
  45. goto :eof
复制代码

TOP

本帖最后由 yuanyannian 于 2012-3-3 23:51 编辑

回复 8# find

再次感谢 find 老大!
  开启变量延迟后,全部通过(必须是将全部"%xx% 改成 !xx! ,否则选 3 时报错)。我重新整理了一下:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. :FileinputBoot
  4. cls
  5. set inputBoot=
  6. set inputGrub=
  7. set inputBcd=
  8. set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
  9. echo %inputBoot%|findstr /ix "[1-3]" >nul||(
  10.   echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot)
  11. echo.
  12. if "!inputBoot!"=="1" goto 直接引导
  13. if "!inputBoot!"=="2" (
  14.   set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
  15.     echo !inputGrub!|findstr /ix "[1-3]" >nul||(
  16.       echo 输入错误,按任意键重新输入 ...&pause>nul&goto FileinputBoot)
  17.       if "!inputGrub!"=="1" goto ldr
  18.       if "!inputGrub!"=="2" goto iso
  19.       if "!inputGrub!"=="3" goto wim
  20. )
  21. if "!inputBoot!"=="3" (
  22.   set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
  23.     echo !inputBcd!|findstr /ix "[1-4]" >nul||(
  24.       echo 输入错误,按任意键重新输入 ...&pause>nul&goto FileinputBoot)
  25.       if "!inputBcd!"=="1" goto ldr
  26.       if "!inputBcd!"=="2" goto grub
  27.       if "!inputBcd!"=="3" goto iso
  28.       if "!inputBcd!"=="4" goto wim
  29. )
  30. goto FileinputBoot
  31. :ldr
  32. echo.Here is ldr!!!
  33. pause
  34. exit
  35. :iso
  36. echo.Here is iso!!!
  37. pause
  38. exit
  39. :wim
  40. echo.Here is wim!!!
  41. pause
  42. exit
  43. :grub
  44. echo.Here is Grub!!!
  45. pause
  46. exit
  47. :直接引导
  48. echo.Here is 直接引导!!!
  49. pause
  50. exit
复制代码

TOP

返回列表