在批处理文件中使用整数计数器(恢复 MySQL 数据库)

Using integer counters in batch file (Restore MySQL Database)

我正在创建一个 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. %=%

这已经奏效了,直到我决定添加一个验证,即当用户已经尝试登录 3 次时 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