创建(批量)单个变量以设置 mysql 的数据路径
create (in batch) a single variable to set data path of mysql
我已经为 mysql (wamp) 的数据路径创建了一个批处理变量:
set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.21\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.21\data"
并且根据版本变化(mysql-wamp 和 x86/x64):
set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.19\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.19\data"
等...
我如何创建(批量)设置 mysql wamp (MYSQLDATAPATH) 数据路径的单个变量,无论版本如何(wampXX 和 mysqlXX)
谢谢!
@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
例程然后执行比较三个级别的机制,处理每个级别上的潜力 leading-zero。请注意,尝试在此处使用文字进行比较将失败,因为如果作为文字进行比较,5.10.01
将比 5.9.99
少 ,但实际上是一个更晚的(和一个会期望,更大)版本。
我已经为 mysql (wamp) 的数据路径创建了一个批处理变量:
set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.21\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.21\data"
并且根据版本变化(mysql-wamp 和 x86/x64):
set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.19\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.19\data"
等...
我如何创建(批量)设置 mysql wamp (MYSQLDATAPATH) 数据路径的单个变量,无论版本如何(wampXX 和 mysqlXX)
谢谢!
@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
例程然后执行比较三个级别的机制,处理每个级别上的潜力 leading-zero。请注意,尝试在此处使用文字进行比较将失败,因为如果作为文字进行比较,5.10.01
将比 5.9.99
少 ,但实际上是一个更晚的(和一个会期望,更大)版本。