需求: 在一个batch脚本里需要用户确认某个信息是否正确。如果正确,那么输入yes,继续后面的工作;如果不正确,输入no,然后提示用户输入正确的值,并读入这个值赋给变量,然后继续后面的工作;如果输入既非yes又非no,提示用户重新输入yes或no,然后再回到前面的判断。
实现:
set VAR=123456
current VAR is %VAR%
echo If confirmed, please input y;otherwise input n: (y/n)
echo off
set /p CHECK_VAR=
echo off
IF not "%CHECK_VAR%" == "y" (
IF not "%CHECK_VAR%" == "n" (
echo Invalid input, try again.
echo If VAR value is confirmed, please input y ;otherwise input n:(y/n)
echo off
set /p CHECK_VAR=
)
)
IF "%CHECK_VAR%" == "y" goto Unchanged
IF "%CHECK_VAR%" == "n" goto Input_VAR
:Unchanged
echo %VAR% is not changed
goto Continue
:Input_VAR
echo Please input the new value of VAR:
echo off
set /p VAR=
goto Continue
:Continue
common_actions
事后分析:因为对batch不熟悉,所以不知道这是不是唯一的方法。一开始没有想到把common_action定义成一个label,即没有goto Continue那一句。结果每次执行完Unchanged lable的内容紧接着就执行Input_VAR的,没有实现跳转。后来在网上找了一个类似的例子,才解决了这个问题。希望以后熟悉batch了,能优化这个方案。