создать (в пакетном режиме) единственную переменную, чтобы установить путь данных MySQL

0

Я создал пакетную переменную для пути данных 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)

Спасибо!

  • 0
    Это ORIGEN или ORIGIN?
  • 0
    Почини. изменить на MYSQLDATAPATH
Теги:
batch-file
wamp

1 ответ

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 затем выполняет механику сравнения трех уровней, заботясь о потенциальном :vcompare нуле на каждом уровне. Обратите внимание, что попытка сравнения с использованием литералов здесь потерпит неудачу, так как 5.10.01 будет меньше 5.9.99 если сравнивать как литерал, но на самом деле это более поздняя (и, следовало ожидать, большая) версия.

  • 0
    Спасибо за ваш сценарий. Но я не понимаю, что вы подразумеваете под «изменить настройку sourcedir в соответствии с вашими обстоятельствами» (Какие обстоятельства? ... В моем вопросе я уточняю, что путь - это% HOMEDRIVE%). Не могли бы вы привести реальный пример SET "sourcedir = U: \ sourcedir"? Спасибо
  • 0
    u:\sourcedir является реальным примером. Это каталог, который я использую для тестирования решений, которые я публикую на SO. Если вы установите для sourcedir значение %HOMEDRIVE% которое подходит для ваших настроек, все должно работать без сбоев. Обратите внимание, однако, как я использую кавычки. Это общепринятый способ SO для преодоления проблем, связанных с конечными пробелами в строках, и позволяет избежать требуемой гимнастики, объединяющей переменные, которые указывают значения
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню