找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30921|回复: 10

[文本处理] [已解决]求助替换mysql中my.ini[basedir][datadir]的BAT脚本

[复制链接]
发表于 2013-1-18 09:49:41 | 显示全部楼层 |阅读模式
本帖最后由 cuteai 于 2013-1-18 17:23 编辑

LZ需要打包一个WEB应用 需要将一个绿色版的Mysql加进去,
mysql根目录下有一个my.ini的配置文件,[basedir]和[datadir]是配置mysql路径的参数
( basedir = %mysql_dir%   datadir = %mysql_dir%/data)
因为不知道用户会安装在哪里,所以考虑通过一个和my.ini同级目录下的BAT脚本来实现修改my.ini中 basedir和datadir

请教各位大大 具体该如何实现

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-1-18 10:13:55 | 显示全部楼层
请把my.ini压缩一下传上来看看
顺便详细说说修改成什么样子
 楼主| 发表于 2013-1-18 10:24:55 | 显示全部楼层
即是把这一段修改

#Path to installation directory. All paths are usually resolved relative to this.
basedir="F:/mysql-5.1.55"
         
#Path to the database root
datadir="F:/mysql-5.1.55/Data/"

将basedir修改成mysql的安装路径 datadir修改成mysql/data
因为mysql的安装路径是未知的 my.ini是位于mysql的根目录下
我的思路是在my.ini同级目录下 创建一个bat 通过%cd%或者 %~dp0获取路径 替换掉my.ini下的basedir和datadir
因为对bat不是很熟悉 请教大大具体该如何实现
发表于 2013-1-18 12:07:08 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('findstr /n .* my.ini') do (
  3.   set "str=%%a"&set "str=!str:*:=!"
  4.   if defined str (
  5.     if /i "!str:~4,4!" equ "dir=" (
  6.       for /f "delims==" %%b in ("!str!") do set "str=%%b="%%~dp0""
  7.       set "str=!str:\=/!"
  8.     )
  9.   )
  10.   echo,!str!
  11. ))>$
  12. move $ my.ini
复制代码
 楼主| 发表于 2013-1-18 14:48:12 | 显示全部楼层
回复 4# batman


    感谢帮助,但是运行之后的结果是:

#Path to installation directory. All paths are usually resolved relative to this.
basedir="%~dp0"
         
#Path to the database root
datadir="%~dp0"  (此处应更改为%basedir%路径下的data目录)

之前我就试过手动将my.ini文件改成%~dp0但是貌似不能识别,尝试链接mysql数据库时会报1067错误(该类错误已查明原因即为basedir和datadir的路径错误导致)
能否在BAT文件中 set CURRENT_DIR = %cd% 得到一个绝对路径  然后将CURRENT_DIR的值传给my.ini中的basedir, 将CURRENT_DIR/data的值传给datadir
发表于 2013-1-18 15:52:49 | 显示全部楼层
这样呢?
  1. @echo off
  2. set "pth=%~dp0"
  3. set "pth=%pth:\=/%"
  4. set "pth=%pth:~,-1%"
  5. (for /f "tokens=1,2* delims=:=" %%a in ('findstr /n .* my.ini') do (
  6.   if "%%c" neq "" (
  7.     if /i not "%%b"=="basedir" (
  8.       if /i not "%%b"=="datadir" (echo,%%b=%%c
  9.       ) else echo,%%b="%pth%/Data/"
  10.     ) else echo,%%b="%pth%"
  11.   ) else echo,%%b
  12. ))>$
  13. move $ my.ini
复制代码

评分

参与人数 1技术 +1 收起 理由
cuteai + 1 感谢

查看全部评分

发表于 2013-1-18 16:19:12 | 显示全部楼层
本帖最后由 terse 于 2013-1-18 16:20 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. set "basedir="%~DP0""
  3. set "datadir="%~DP0data/""
  4. (for /f "tokens=1* delims=:" %%a in ('FINDSTR /n .* "MY.INI"') do (
  5.     for /f "delims== " %%i in ("%%b") do (
  6.         if defined %%i (echo;%%i=!%%i:\=/!)else echo;%%b
  7. )))>$
  8. move $ my.ini
  9. pause
复制代码
 楼主| 发表于 2013-1-18 16:42:55 | 显示全部楼层
回复 6# apang

非常感谢 确实可以实现了 帮了我一个大忙
发表于 2013-1-18 17:08:35 | 显示全部楼层
问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
 楼主| 发表于 2013-1-18 17:24:15 | 显示全部楼层
好的 已改...
我想给每个来帮的人都加啊。。可惜只有1分
发表于 2013-2-4 23:27:08 | 显示全部楼层
各位大大能否讲讲
  1. >$
  2. move $ my.ini
复制代码
这两句是啥意思啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 00:27 , Processed in 0.021003 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表