Windows 带 IF 条件的批次
Windows batch with IF condition
我正在尝试创建一个 window 批处理文件作为我工作流程的自动化。起初我用这个做了一个例子并且它有效:
@echo off
set /p answer=Are you a boy (Y/N)?
if /i "%answer%" == "Y" (
echo Yes, I am a boy.
)
if /i "%answer%" == "N" (
echo No, I am a girl.
)
echo end....
然后我尝试用我的自动化来做:
@echo off
echo. -------Default Settings--------
echo APP_DEBUG=true
echo DB_HOST=localhost
echo DB_USERNAME=root
echo DB_PASSWORD=
echo. -------------------------------
set /p question="Use the default settings? [Y/N]: "
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
}
if /i "%question%" == "Y" (
set APP_DEBUG=true
set DB_HOST=localhost
set DB_USERNAME=root
set DB_PASSWORD=
echo default settings
)
echo done
问题是它在请求输入后就结束了执行。我做错了什么?如何让它工作(如果可能而不使用 goto
)?
您不小心使用了括号来结束您的第一个 if
语句而不是右括号。
变化:
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
}
收件人:
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
)
此外,在这种情况下我会使用 choice
,因为它不需要用户按回车键来提交输入:
@echo off
echo. -------Default Settings--------
echo APP_DEBUG=true
echo DB_HOST=localhost
echo DB_USERNAME=root
echo DB_PASSWORD=
echo. -------------------------------
choice /C:yn /n /m "Use the default settings? [Y/N]: "
if errorlevel==2 (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
) else (
set APP_DEBUG=true
set DB_HOST=localhost
set DB_USERNAME=root
set DB_PASSWORD=
echo default settings
)
echo done
我正在尝试创建一个 window 批处理文件作为我工作流程的自动化。起初我用这个做了一个例子并且它有效:
@echo off
set /p answer=Are you a boy (Y/N)?
if /i "%answer%" == "Y" (
echo Yes, I am a boy.
)
if /i "%answer%" == "N" (
echo No, I am a girl.
)
echo end....
然后我尝试用我的自动化来做:
@echo off
echo. -------Default Settings--------
echo APP_DEBUG=true
echo DB_HOST=localhost
echo DB_USERNAME=root
echo DB_PASSWORD=
echo. -------------------------------
set /p question="Use the default settings? [Y/N]: "
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
}
if /i "%question%" == "Y" (
set APP_DEBUG=true
set DB_HOST=localhost
set DB_USERNAME=root
set DB_PASSWORD=
echo default settings
)
echo done
问题是它在请求输入后就结束了执行。我做错了什么?如何让它工作(如果可能而不使用 goto
)?
您不小心使用了括号来结束您的第一个 if
语句而不是右括号。
变化:
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
}
收件人:
if /i "%question%" == "N" (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
)
此外,在这种情况下我会使用 choice
,因为它不需要用户按回车键来提交输入:
@echo off
echo. -------Default Settings--------
echo APP_DEBUG=true
echo DB_HOST=localhost
echo DB_USERNAME=root
echo DB_PASSWORD=
echo. -------------------------------
choice /C:yn /n /m "Use the default settings? [Y/N]: "
if errorlevel==2 (
echo Configure custom setting
set /p APP_DEBUG="APP_DEBUG: "
set /p DB_HOST="DB_HOST: "
set /p DB_USERNAME="DB_USERNAME: "
set /p DB_PASSWORD="DB_PASSWORD: "
) else (
set APP_DEBUG=true
set DB_HOST=localhost
set DB_USERNAME=root
set DB_PASSWORD=
echo default settings
)
echo done