Batch file SET/p崩溃批处理文件进程

Batch file SET/p崩溃批处理文件进程,batch-file,variables,Batch File,Variables,在一个批处理文件中,我从用户那里获取信息,以便以后进行数据库工作 我首先询问用户是否正在使用Windows Auth,然后根据答案询问用户名和密码,或者设置一个变量并继续 但就我个人而言,我不明白为什么一行SET/p导致批处理文件崩溃,而另一行SET/p却没有 这是我的密码: @ECHO OFF @SETLOCAL ENABLEDELAYEDEXPANSION CHOICE /M "Will you be using Windows Authentication to connect to

在一个批处理文件中,我从用户那里获取信息,以便以后进行数据库工作

我首先询问用户是否正在使用Windows Auth,然后根据答案询问用户名和密码,或者设置一个变量并继续

但就我个人而言,我不明白为什么一行
SET/p
导致批处理文件崩溃,而另一行
SET/p
却没有

这是我的密码:

@ECHO OFF
@SETLOCAL ENABLEDELAYEDEXPANSION


CHOICE /M "Will you be using Windows Authentication to connect to the database?"

ECHO ERRORLEVEL: %ERRORLEVEL%
@PAUSE

IF ERRORLEVEL 2 (
    ECHO ERRORLEVEL should be 2: %ERRORLEVEL%
    @PAUSE
    SET _USINGWINAUTH=FALSE

    SET /p _USERNAME=User name: 
    REM SET /p _PASSWORD=Password (NOTE: Password will be displayed as you type): 
) ELSE (
    ECHO ERRORLEVEL should be 1: %ERRORLEVEL%
    @PAUSE
    SET _USINGWINAUTH=TRUE
)


ECHO.
ECHO _USINGWINAUTH: %_USINGWINAUTH%
ECHO _USERNAME: %_USERNAME%
ECHO _PASSWORD: %_PASSWORD%

@PAUSE
按原样,第二个
SET/p
被注释掉后,无论您是回答
Y
还是
N
脚本都可以正常运行

但是,如果第二行
SET/p
没有注释,不管答案是什么,脚本在
ECHO ERRORLEVEL
之前的暂停处点击一个键后立即关闭


我只是不明白为什么会这样

如上次所述,在使用插入符号时,如果您重新编写逻辑,则会更好

一个例子:

@ECHO关闭
选项/M“您是否将使用Windows身份验证连接到数据库”
如果“%ERRORLEVEL%”=“1”设置“\u使用WinAuth=TRUE”&转到下一步
设置“\u USINGWINAUTH=FALSE”
设置/P“\u用户名=用户名:”
设置/P“\u PASSWORD=密码(将在您键入时显示):
:下一个
回音(
使用WinAuth设置
设置_username2>numl
设置密码2>NUL
暂停

当在任何文本中的(代码块)内使用右括号时,如果没有使用插入符号转义,代码块将过早结束。就在我看到这一点之前,我取出了便笺部分并运行了它,因此我知道我在哪里做错了。再次感谢,@LotPings!将提示字符串置于引号之间;问题是
被命令解释器识别为
if ErrorLevel 2(
条件…@marky,我相信您有两个选项来回显
。您可以将
SET
命令括在引号中,或者使用
^
来转义
。您还需要多少个选项。您还收到了关于其中一个选项中的右括号的警告。