我正在创建一个bat
文件,以便从sql
文件自动恢复MySQL数据库。这是代码:
@ECHO OFF
REM author: Gideon Apollo Bardelas
SET attempt=0
SET MAX_ATTEMPT=4
@ECHO Deploying database on MySQL Server.
IF "%MYSQL_HOME%" == "" GOTO NOHOME
:YESHOME
SET mysql=%MYSQL_HOME%
@echo Running MySQL on the MYSQL_HOME...
GOTO :RUN_SCRIPT
:NOHOME
@ECHO.
@ECHO MySQL Server is not detected on the system.
:NOHOME_CONFIRM
set /p cho=Do you have a MySQL server installed (y/n)? %=%
if %cho%==Y goto :NOHOME_ASK
if %cho%==y goto :NOHOME_ASK
if %cho%==n goto :NOHOME_QUIT
if %cho%==N goto :NOHOME_QUIT
@echo Invalid choice.
goto :NOHOME_CONFIRM
:NOHOME_ASK
@ECHO.
set /p temp_path=Please give your mysql directory (Q to terminate): %=%
:NOHOME_PATH_VERIFY
if %temp_path%==Q goto :END
if %temp_path%==q goto :END
IF EXIST %temp_path%mysql.exe GOTO :NOHOME_PATH_ACCEPT
GOTO :NOHOME_PATH_REJECT
:NOHOME_PATH_ACCEPT
SET mysql=%temp_path%
@echo Running MySQL on the specified directory...
GOTO :RUN_SCRIPT
:NOHOME_PATH_REJECT
@echo Cannot find mysql.exe in the specified directory.
GOTO :NOHOME_ASK
:NOHOME_QUIT
@echo.
@echo Please install first MySQL Server on your system to continue.
GOTO :END
:RUN_SCRIPT
SET attempt=attempt+1
set /p username=MySQL username: %=%
set /p password=MySQL password: %=%
%mysql%mysql -u %username% -p%password% mysql < schema.sql 1>NUL 2>NUL || GOTO :VALIDATE
GOTO :SUCCESS
:VALIDATE
if %attempt% EQU %MAX_ATTEMPT% (
@ECHO.
@ECHO You have reached maximum attempts to log in MySQL Server.
GOTO :END
) ELSE GOTO :RUN_SCRIPT
:SUCCESS
@ECHO.
@ECHO Finished deploying server.
:END
set /p cho=Press any key to quit. %=%
这已经奏效了,直到我决定添加一个验证,当用户已经尝试登录MySQL三次时,它将终止批处理文件。问题是计数器不工作。它将继续请求MySQL凭据,直到收到合适的凭据为止。
我认为问题源于:VALIDATE
条款。但我无法修复。
谢谢你的帮助。
您的错误在这里:
SET attempt=attempt+1
要使用set
进行算术运算,必须使用/a
参数:
set /a attempt=%attempt%+1
您可以将不带%
的变量与set /a
:一起使用
set /a attempt=attempt+1
或者使用较短的形式:
set /a attempt+=1