Board logo

标题: [文本处理] [已解决]求助替换mysql中my.ini[basedir][datadir]的BAT脚本 [打印本页]

作者: cuteai    时间: 2013-1-18 09:49     标题: [已解决]求助替换mysql中my.ini[basedir][datadir]的BAT脚本

本帖最后由 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

请教各位大大 具体该如何实现
作者: BAT-VBS    时间: 2013-1-18 10:13

请把my.ini压缩一下传上来看看
顺便详细说说修改成什么样子
作者: cuteai    时间: 2013-1-18 10:24

即是把这一段修改

#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不是很熟悉 请教大大具体该如何实现
作者: batman    时间: 2013-1-18 12:07

  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
复制代码

作者: cuteai    时间: 2013-1-18 14:48

回复 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
作者: apang    时间: 2013-1-18 15:52

这样呢?
  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
复制代码

作者: terse    时间: 2013-1-18 16:19

本帖最后由 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
复制代码

作者: cuteai    时间: 2013-1-18 16:42

回复 6# apang

非常感谢 确实可以实现了 帮了我一个大忙
作者: BAT-VBS    时间: 2013-1-18 17:08

问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
作者: cuteai    时间: 2013-1-18 17:24

好的 已改...
我想给每个来帮的人都加啊。。可惜只有1分
作者: flaven    时间: 2013-2-4 23:27

各位大大能否讲讲
  1. >$
  2. move $ my.ini
复制代码
这两句是啥意思啊




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2