SET / p崩溃批处理文件过程

时间:2018-07-10 15:57:34

标签: batch-file variables

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

我首先询问用户是否正在使用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前的暂停处敲击一个键后立即关闭。

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

1 个答案:

答案 0 :(得分:1)

最后一次,在使用插入符号的情况下,最好重新设计逻辑。

一个例子:

@ECHO OFF
CHOICE /M "Will you be using Windows Authentication to connect to the database"
IF "%ERRORLEVEL%"=="1" SET "_USINGWINAUTH=TRUE" & GOTO NEXT    
SET "_USINGWINAUTH=FALSE"
SET /P "_USERNAME=User Name: "
SET /P "_PASSWORD=Password (will be displayed as you type): "

:NEXT
ECHO(
SET _USINGWINAUTH
SET _USERNAME 2>NUL
SET _PASSWORD 2>NUL
PAUSE