创建(批量)单个变量来设置mysql的数据路径

时间:2018-04-09 20:15:38

标签: mysql batch-file wamp

我已经为mysql(wamp)的数据路径创建了一个批处理变量:

Return code 1 for dex process

它根据版本(mysql-wamp和x86 / x64)而变化:

set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.21\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.21\data"

等...

如何创建(批量)设置mysql wamp(MYSQLDATAPATH)数据路径的单个变量,无论版本如何( wampXX mysqlXX )< / p>

谢谢!

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "mysqldatapath="
FOR %%a IN (wamp wamp64) DO (
 FOR /f %%d IN ('dir /ad /b "%sourcedir%\%%a\bin\mysql\mysql*" 2^>nul') DO (
  IF exist "%sourcedir%\%%a\bin\mysql\%%d\data" (
   SET "candidate=%sourcedir%\%%a\bin\mysql\%%d"
   CALL :latest %%d
  )
 )
)

ECHO mysqldatapath=%mysqldatapath%

GOTO :EOF

:: latest version required? Format %1 may be mysqlA.C.E or mysqlAB.CD.EF
:latest
IF NOT defined mysqldatapath GOTO newver
:: is newly-detected version in %1 preferred to %sql_ver%?
SET "new_ver=%1"
:: remove "mysql"
SET "new_ver=%new_ver:~5%"
:: replace '.' with ' '
SET "new_ver=%new_ver:.= %"
CALL :vcompare %sql_ver% %new_ver%
:: :vcompare will clear 'new_ver' if new version is preferred
IF NOT DEFINED new_ver GOTO :eof
:newver
SET "mysqldatapath=%candidate%"
SET "sql_ver=%1"
:: remove "mysql"
SET "sql_ver=%sql_ver:~5%"
:: replace '.' with ' '
SET "sql_ver=%sql_ver:.= %"
GOTO :eof

:: version comparison. old old old new new new  as 1 or 2-digit

:vcompare
IF "%4"=="" GOTO :EOF
SET "v_1=0000%1"
SET "v_4=0000%4"
SET /a v_1=1%v_1:~-3%
SET /a v_4=1%v_4:~-3%
IF %v_1%==%v_4% shift&GOTO vcompare
IF %v_1% gtr %v_4% SET "new_ver="
GOTO :eof

您需要更改sourcedir的设置以适合您的具体情况。

并不像人们最初期望的那么容易。棘手的部分是从候选人中选择所需的版本。

第一个块搜索wamp,然后wamp64搜索名为mysql*的目录,然后在mysql*目录包含data时指定候选者。 :latest例程然后检查版本号并选择要分配给mysqldatapath的最新版本。

:latestnew_ver设置为找到的版本号,例如。 5.7.19并将其转换为5 7 19:vcompare例程然后执行比较三个级别的机制,处理每个级别的潜在前导零。请注意,尝试使用此处的文字进行比较将失败,因为5.10.01如果作为文字进行比较,则 <{1}},但实际上是后来的(并且可以预期,更大版本。