我想用它来从命令行安装mysql
cls
echo off
SET ProgFiles86Root="%ProgramFiles(x86)%"
IF NOT %ProgFiles86Root%=="" ( SET ProgFiles86Root=%ProgramFiles% )
echo Starting MySQL install
msiexec /i "mysql-5.5.11-win32.msi" /qn
echo MySQL installed successfully
echo Configurating MySQL Server...
"%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe" -i -q ServiceName=MySQL RootPassword=mysql ServerType=DEVELOPER
DatabaseType=MIXED Port=3306 Charset=utf8
echo MySQL has been installed successfully
setx PATH "%%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin%;"
cd /
c:
mysql --user=root --password=mysql -e "CREATE USER 'myuser'@'localhost' IDENTIFIED BY '123456';"
mysql --user=root --password=mysql -e "GRANT ALL ON mydatabase.* TO 'myuser'@'192.168.0.%' IDENTIFIED BY '123abc' WITH GRANT OPTION; FLUSH
PRIVILEGES;
但我得到了错误
Starting MySQL install
MySQL installed successfully
Configurating MySQL Server...
The system cannot find the path specified.
MySQL has been installed successfully
SUCCESS: Specified value was saved.
'mysql' is not recognized as an internal or external command,
operable program or batch file.
'mysql' is not recognized as an internal or external command,
operable program or batch file.
命令行说安装了Mysql,但它没有,因为我无法在控制面板的卸载部分对其进行罚款
答案 0 :(得分:1)
错误1:将带有和不带双引号的程序文件文件夹路径分配给ProgFiles86Root
这一行
SET ProgFiles86Root="%ProgramFiles(x86)%"
将字符串"%ProgramFiles(x86)%"
分配给双引号,并将所有可能存在的尾随空格和制表符分配给环境变量ProgFiles86Root
。
行
中的 IF 条件IF NOT %ProgFiles86Root%=="" ( SET ProgFiles86Root=%ProgramFiles% )
有效,因为环境变量ProgFiles86Root
的值是双引号。双引号也通过命令 IF 进行比较,而不仅仅是双引号括起的字符串。
但是如果由于批处理文件在32位Windows上运行而导致此 IF 条件为真,则环境变量ProgramFiles
的值将分配给环境变量{{1}没有双引号。
有关如何将字符串更正指定给环境变量的更多详细信息,请参阅How to set environment variables with spaces?上的答案以及与之相关的答案。
让我们接下来看看:
ProgFiles86Root
这可以在64位Windows上扩展为
"%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"
双引号文件名中的双引号,路径当然不好,或者例如在32位Windows上
""C:\Program Files (x86)"\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"
这将是可执行文件的正确规范。
错误2:批处理文件中的命令行无效
下一个错误是在线:
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"
此行不包含要为Windows命令解释程序执行的命令,因此必须返回错误消息。
我非常确定此行包含DatabaseType=MIXED Port=3306 Charset=utf8
命令行的选项。在相关批处理代码的最后一行上使用字符串mysqlinstanceconfig.exe
犯了同样的错误,该字符串应位于上面命令行的末尾。
错误3 :尝试使用自定义文件夹路径 REPLACE 用户路径
命令PRIVILEGES;
适用于 REPLACING 用户(如此处所做)或系统 PATH(仅限选项{{1}这当然需要管理员权限,并且对当前正在运行的命令进程的本地 PATH没有任何影响,解释批处理文件中的命令。
使用setx
命令行中指定的字符串 REPLACE 用户 PATH当然是个坏主意,尽管默认情况下没有用户已定义PATH。如果替换用户路径的尝试成功,此计算机可能无法按预期开始工作。
看起来您只想将MySQL Server 5.5的目录/m
的路径追加到本地 PATH,以便在没有路径的情况下运行可执行文件setx
。但是为什么不以完整路径运行bin
?
错误4:设置不同的当前目录是错误的
mysql
第一行什么也没做。要将当前目录设置为当前驱动器的根目录,必须运行mysql.exe
,因为反斜杠字符是Windows上的目录分隔符,正斜杠用于选项。命令 CD 将斜杠解释为选项的开头,因此忽略它,因为正斜杠后没有指定选项。在命令提示符窗口cd /
c:
中运行以获取有关此命令的帮助。
第二行在驱动器C上创建当前目录:当前正在运行的命令进程的当前目录。哪个目录是驱动器C上的当前目录:此代码未定义。
错误5:尝试在没有路径和文件扩展名的情况下运行cd \
命令cd /?
希望所有用户都失败,尽管这不太可能。但即使mysql.exe
成功,解释批处理文件的当前命令进程也已经从启动批处理文件时创建的父进程的所有环境变量的本地副本。因此,在没有文件扩展名和路径的情况下运行setx
必须失败,除非之前已安装MySQL且其目录setx
已添加到系统或用户批处理文件处理开始前的路径。
<强>解决方案:强>
使用此批次代码:
mysql
如果没有在安装或配置MySQL时,此批处理代码不会将MySQL二进制文件的目录路径添加到 system PATH。如果出于某种未知原因,本地 PATH必须使用MySQL二进制文件目录的路径进行扩展,请通过从两行中删除命令 REM 来取消注释上面批处理文件末尾附近的两行
但是,如果您真的想将MySQL二进制文件目录添加到用户或系统 PATH,我真的不建议那么请仔细阅读有关的评论和答案