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