在批处理文件中,我正在从用户那里获取信息,以便以后进行数据库工作。
我首先询问用户是否正在使用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
前的暂停处敲击一个键后立即关闭。
我只是不明白为什么会这样!
答案 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