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