Board logo

标题: [文本处理] [已解决]MySQL数据库操作的两个批处理怎样合成一个? [打印本页]

作者: hucuibai    时间: 2011-3-30 15:57     标题: [已解决]MySQL数据库操作的两个批处理怎样合成一个?

  1. @echo &setlocal enabledelayedexpansion
  2. for /r F:\123 %%i in (*.txt) do (
  3. set str=%%~ni
  4. set str1=!str:~,-8!
  5. set str2=%%i
  6. for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
  7. if !str1!==onlinetimerecord (
  8. echo use !str2!^;>456.sql
  9. echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values >>456.sql
  10. for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
  11. sed -i "$s/,$/;/" 456.sql) else (
  12. if !str1!==gmoperationrecord (
  13. echo use !str2!^;>456.sql
  14. echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values >>456.sql
  15. for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
  16. sed -i "$s/,$/;/" 456.sql)
  17. pause
  18. )
复制代码
  1. @echo off
  2. e:
  3. cd "Program Files\MySQL\MySQL Server 5.0\bin"
  4. mysql -u root -p123456 <F:\dsc\20110106\456.sql
复制代码
我运行第一个批处理到暂停处生成一个456.sql文件然后运行第二个批处理,导入数据库正常,所有的文件都能正常导入,但是我把他们和到一起,把第二个分别加到if语句的后面 结果却是只导入的第一个文件的内容,而且是有几个txt文件就导入几次!我想了一天,不得结果,求教高人指点,感激不尽!可能我说的有点不清楚!见谅!还请帮帮忙
作者: hucuibai    时间: 2011-3-30 16:34

可能我说的不清楚,简单的说就是我想读取日志文件的内容,然后做成.sql文件,将数据导入数据库,日志文件有七个不同的文件,我就做了一个for循环里面嵌套一个if语句 应该能看懂吧! 怎么没人来帮帮忙!版主,管理员!
作者: hucuibai    时间: 2011-3-30 16:54

F:\123\gamerecord-chn1030\20110329\gmoperationrecord20110329.txt
F:\123\gamerecord-chn1030\20110329\onlinetimerecord20110329.txt
F:\123\gamerecord-chn4006\20110329\gmoperationrecord20110329.txt
F:\123\gamerecord-chn4006\20110329\itemrecord20110329.txt
F:\123\gamerecord-chn4006\20110329\onlinetimerecord20110329.txt
F:\123\gamerecord-chn4006\20110329\PlayerLogonLog20110329.txt
F:\123\gamerecord-chn4006\20110329\PlayerPropertyLog20110329.txt
F:\123\gamerecord-chn4006\20110329\serverinfo20110329.txt
F:\123\gamerecord-chn4006\20110329\starLevelInfoLog20110329.txt
文件位置大致是这样的gamerecord-chn····这个是数据库名称starLevelInfoLog是表的名称
作者: hucuibai    时间: 2011-3-30 22:21

高手啊,哪里去了!
作者: neorobin    时间: 2011-3-30 22:50

本帖最后由 neorobin 于 2011-3-31 20:53 编辑

1. 你的代码格式不好, 左圆括号有 12 个, 而右圆括号只有 11 个, 第一个 FOR 后面的循环体的左圆括号无配对的右圆号
2. 第一代码 @echo &setlocal ... echo 是没意义的, 要么 echo off, 要么 echo on
3. 多行语句输出到一个文件, 较之于 > 加 >> 的用法不如采用如下形式:
  1. >file (
  2.   statement
  3.   statement
  4.   statement
  5. )
复制代码
更多的分析, 你就自己看吧
  1. @echo &setlocal enabledelayedexpansion
  2. for /r F:\123 %%i in (*.txt) do (
  3.   set str=%%~ni
  4.   set str1=!str:~,-8!
  5.   set str2=%%i
  6.   for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
  7.   if !str1!==onlinetimerecord (
  8.     echo use !str2!^;>456.sql
  9.     echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values >>456.sql
  10.     for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
  11.     sed -i "$s/,$/;/" 456.sql
  12.   ) else (
  13.     if !str1!==gmoperationrecord (
  14.       echo use !str2!^;>456.sql
  15.       echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values >>456.sql
  16.       for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
  17.       sed -i "$s/,$/;/" 456.sql
  18.     )
  19.     pause
  20.   )
复制代码

作者: hucuibai    时间: 2011-3-31 09:43

5# neorobin
刚刚看了下,我那个代码确实是少了个括号,这是失误,我源代码上面是有的,要不然也运行不了,现在的问题是我插入第二段代码到第一段代码里面去,就取不到全部文件的内容,就只能取到第一个文件,我把第二段代码放到了sed -i "$s/,$/;/" 456.sql这个一段下面,我搞不明白为什么?
作者: hucuibai    时间: 2011-3-31 11:12

5# neorobin


请帮忙再帮我看看,哪里出错了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r F:\123 %%i in (*.txt) do (
  3.         set str=%%~ni
  4.         set str1=!str:~,-8!
  5.         set str2=%%i
  6.         for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
  7.         if !str1!==onlinetimerecord (
  8.             >456.sql (
  9.             echo use !str2!^;
  10.             echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values
  11.             for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,
  12.                     )
  13.                                     ) else (
  14.        if !str1!==gmoperationrecord (
  15.             >456.sql (
  16.                 echo use !str2!^;
  17.                 echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values
  18.                 for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,
  19.                      )
  20.                
  21.                                    )
  22.                                           )
  23. sed -i "$s/,$/;/" 456.sql
  24. e:
  25. cd "Program Files\MySQL\MySQL Server 5.0\bin"
  26. mysql -u root -p123456 <F:\20110101\456.sql        
  27. )
复制代码

作者: hucuibai    时间: 2011-3-31 11:48

搞定 原来要在最后面回到f盘才行 不然就会提示找不到文件,还是搞不清楚为什么
作者: neorobin    时间: 2011-3-31 20:54

本帖最后由 neorobin 于 2011-3-31 20:58 编辑

8# hucuibai
是被下面两行代码改变了工作路径的缘故:
  1. e:
  2. cd "Program Files\MySQL\MySQL Server 5.0\bin"
复制代码
改成这样的看看且这行代码放在批处理首部即可,不要放在循环里多次运行)
  1. path e:\Program Files\MySQL\MySQL Server 5.0\bin;%path%
复制代码





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