批量创建一个变量来设置mysql的数据路径

qc6wkl3g  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(297)

我已经为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)
谢谢!

oogrdqng

oogrdqng1#

@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 . 这个 :vcompare 例行程序然后做比较三个层次的机制,照顾潜在的领先于零的每一个层次。请注意,尝试在此处使用文本进行比较将失败,如下所示: 5.10.01 会小于 5.9.99 如果作为一个文字比较,但实际上是一个更高的版本(人们会期望,更高)。

相关问题