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

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

[复制链接]
发表于 2012-3-3 22:07:02 | 显示全部楼层 |阅读模式
看代码
  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,均自动退出,这代码肯定有问题,请老师们给看看?
谢谢!
 楼主| 发表于 2012-3-3 22:19:49 | 显示全部楼层
突然想到,是不是不能用 %path%(本身是系统变量吧?),改成 M 后,输入1和2可成功跳转,但输入3 依然会自动退出。
发表于 2012-3-3 22:37:39 | 显示全部楼层
  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
复制代码
发表于 2012-3-3 22:46:14 | 显示全部楼层
回复 1# yuanyannian


    除了%path%外,第6行FilePath标签没指定,要是输入1-3之外的字符就会报错。
 楼主| 发表于 2012-3-3 22:51:15 | 显示全部楼层
find 发表于 2012-3-3 22:37


谢谢老大!

inputBoot= 可通过,

inputGrub=

inputBcd=

进一步选择失败?
发表于 2012-3-3 22:55:00 | 显示全部楼层
回复 5# yuanyannian


报错信息是什么?
 楼主| 发表于 2012-3-3 22:58:15 | 显示全部楼层
本帖最后由 yuanyannian 于 2012-3-3 23:06 编辑
find 发表于 2012-3-3 22:37



原谅我的网速如牛。

    inputGrub=
    和
    inputBcd=

   直接退出。
发表于 2012-3-3 23:20:51 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2012-3-3 23:39:44 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 21:10 , Processed in 0.020621 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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