![Board logo](images/default/logo.gif)
标题: [文件操作] [已解决]批处理文件连续使用 set /p + if 为何失败? [打印本页]
作者: yuanyannian 时间: 2012-3-3 22:07 标题: [已解决]批处理文件连续使用 set /p + if 为何失败?
看代码- @echo off
-
- :mode
- set /p path=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
- echo %path%|findstr /ix "[1-3]" >nul||(
- echo 输入错误,按任意键重新选择 ...&pause>nul&goto Mode
- )
- if "%path%"=="1" goto 直接引导
- if "%path%"=="2" (
- set /p k1=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
- )
- if "%k1%"=="1" goto ldr
- if "%k1%"=="2" goto iso
- if "%k1%"=="3" goto wim
- if "%path%"=="3" (
- set /p k2=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
- )
- if "%k2%"=="1" goto ldr
- if "%k2%"=="2" goto grub
- if "%k2%"=="3" goto iso
- if "%k2%"=="4" goto wim
- goto mode
-
- :ldr
- echo.Here is ldr!!!
- pause
- exit
-
- :iso
- echo.Here is iso!!!
- pause
- exit
-
- :wim
- echo.Here is wim!!!
- pause
- exit
-
- :grub
- echo.Here is Grub!!!
- pause
- exit
-
- :直接引导
- echo.Here is 直接引导!!!
- pause
- exit
复制代码
输入 1 2 3,均自动退出,这代码肯定有问题,请老师们给看看?
谢谢!
作者: yuanyannian 时间: 2012-3-3 22:19
突然想到,是不是不能用 %path%(本身是系统变量吧?),改成 M 后,输入1和2可成功跳转,但输入3 依然会自动退出。
作者: find 时间: 2012-3-3 22:37
- @echo off
-
- :mode
- set inputBoot=
- set inputGrub=
- set inputBcd=
- set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
- echo %inputBoot%|findstr /ix "[1-3]" >nul||(
- echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot
- )
- if "%inputBoot%"=="1" goto 直接引导
- if "%inputBoot%"=="2" (
- set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
- if "%inputGrub%"=="1" goto ldr
- if "%inputGrub%"=="2" goto iso
- if "%inputGrub%"=="3" goto wim
- )
- if "%inputBoot%"=="3" (
- set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
- if "%inputBcd%"=="1" goto ldr
- if "%inputBcd%"=="2" goto grub
- if "%inputBcd%"=="3" goto iso
- if "%inputBcd%"=="4" goto wim
- )
- goto mode
-
- :ldr
- echo.Here is ldr!!!
- pause
- exit
-
- :iso
- echo.Here is iso!!!
- pause
- exit
-
- :wim
- echo.Here is wim!!!
- pause
- exit
-
- :grub
- echo.Here is Grub!!!
- pause
- exit
-
- :直接引导
- echo.Here is 直接引导!!!
- pause
- exit
复制代码
作者: apang 时间: 2012-3-3 22:46
回复 1# yuanyannian
除了%path%外,第6行FilePath标签没指定,要是输入1-3之外的字符就会报错。
作者: yuanyannian 时间: 2012-3-3 22:51
find 发表于 2012-3-3 22:37 ![](http://www.bathome.net/images/common/back.gif)
谢谢老大!
inputBoot= 可通过,
inputGrub=
和
inputBcd=
进一步选择失败?
作者: find 时间: 2012-3-3 22:55
回复 5# yuanyannian
报错信息是什么?
作者: yuanyannian 时间: 2012-3-3 22:58
本帖最后由 yuanyannian 于 2012-3-3 23:06 编辑
find 发表于 2012-3-3 22:37 ![](http://www.bathome.net/images/common/back.gif)
原谅我的网速如牛。
inputGrub=
和
inputBcd=
直接退出。
作者: find 时间: 2012-3-3 23:20
回复 7# yuanyannian - @echo off
- setlocal enabledelayedexpansion
- :mode
- set inputBoot=
- set inputGrub=
- set inputBcd=
- set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
- echo %inputBoot%|findstr /ix "[1-3]" >nul||(
- echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot
- )
- if "%inputBoot%"=="1" goto 直接引导
- if "%inputBoot%"=="2" (
- set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
- if "!inputGrub!"=="1" goto ldr
- if "!inputGrub!"=="2" goto iso
- if "!inputGrub!"=="3" goto wim
- )
- if "%inputBoot%"=="3" (
- set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
- if "!inputBcd!"=="1" goto ldr
- if "!inputBcd!"=="2" goto grub
- if "!inputBcd!"=="3" goto iso
- if "!inputBcd!"=="4" goto wim
- )
- goto mode
-
- :ldr
- echo.Here is ldr!!!
- pause
- goto :eof
-
- :iso
- echo.Here is iso!!!
- pause
- goto :eof
-
- :wim
- echo.Here is wim!!!
- pause
- goto :eof
-
- :grub
- echo.Here is Grub!!!
- pause
- goto :eof
-
- :直接引导
- echo.Here is 直接引导!!!
- pause
- goto :eof
复制代码
作者: yuanyannian 时间: 2012-3-3 23:39
本帖最后由 yuanyannian 于 2012-3-3 23:51 编辑
回复 8# find
再次感谢 find 老大!
开启变量延迟后,全部通过(必须是将全部"%xx% 改成 !xx! ,否则选 3 时报错)。我重新整理了一下:- @echo off
- setlocal EnableDelayedExpansion
-
- :FileinputBoot
- cls
- set inputBoot=
- set inputGrub=
- set inputBcd=
- set /p inputBoot=请输入引导方式 [1/直接引导,2/Grub引导,3/Bcd引导]:
- echo %inputBoot%|findstr /ix "[1-3]" >nul||(
- echo 输入错误,按任意键重新选择 ...&pause>nul&goto FileinputBoot)
- echo.
- if "!inputBoot!"=="1" goto 直接引导
- if "!inputBoot!"=="2" (
- set /p inputGrub=请选择 Grub 引导的文件类型 [1/ldr,2/iso文件,3/wim文件]:
- echo !inputGrub!|findstr /ix "[1-3]" >nul||(
- echo 输入错误,按任意键重新输入 ...&pause>nul&goto FileinputBoot)
- if "!inputGrub!"=="1" goto ldr
- if "!inputGrub!"=="2" goto iso
- if "!inputGrub!"=="3" goto wim
- )
- if "!inputBoot!"=="3" (
- set /p inputBcd=请选择Bcd引导的文件类型 [1/ldr,2/Grub,3/iso文件,4/wim文件]:
- echo !inputBcd!|findstr /ix "[1-4]" >nul||(
- echo 输入错误,按任意键重新输入 ...&pause>nul&goto FileinputBoot)
- if "!inputBcd!"=="1" goto ldr
- if "!inputBcd!"=="2" goto grub
- if "!inputBcd!"=="3" goto iso
- if "!inputBcd!"=="4" goto wim
- )
- goto FileinputBoot
-
- :ldr
- echo.Here is ldr!!!
- pause
- exit
-
- :iso
- echo.Here is iso!!!
- pause
- exit
-
- :wim
- echo.Here is wim!!!
- pause
- exit
-
- :grub
- echo.Here is Grub!!!
- pause
- exit
-
- :直接引导
- echo.Here is 直接引导!!!
- pause
- exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |