[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]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文件就导入几次!我想了一天,不得结果,求教高人指点,感激不尽!可能我说的有点不清楚!见谅!还请帮帮忙
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

TOP

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是表的名称

TOP

高手啊,哪里去了!

TOP

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

评分人数

TOP

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

TOP

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

TOP

搞定 原来要在最后面回到f盘才行 不然就会提示找不到文件,还是搞不清楚为什么

TOP

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

TOP

返回列表