标题: [文本处理] [已解决]MySQL数据库操作的两个批处理怎样合成一个? [打印本页]
作者: hucuibai 时间: 2011-3-30 15:57 标题: [已解决]MySQL数据库操作的两个批处理怎样合成一个?
- @echo &setlocal enabledelayedexpansion
- for /r F:\123 %%i in (*.txt) do (
- set str=%%~ni
- set str1=!str:~,-8!
- set str2=%%i
- for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
-
- if !str1!==onlinetimerecord (
- echo use !str2!^;>456.sql
- echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values >>456.sql
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
- sed -i "$s/,$/;/" 456.sql) else (
-
- if !str1!==gmoperationrecord (
- echo use !str2!^;>456.sql
- echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values >>456.sql
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
- sed -i "$s/,$/;/" 456.sql)
- pause
- )
复制代码
- @echo off
- e:
- cd "Program Files\MySQL\MySQL Server 5.0\bin"
- 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. 多行语句输出到一个文件, 较之于 > 加 >> 的用法不如采用如下形式:- >file (
- statement
- statement
- statement
- )
复制代码
更多的分析, 你就自己看吧- @echo &setlocal enabledelayedexpansion
- for /r F:\123 %%i in (*.txt) do (
- set str=%%~ni
- set str1=!str:~,-8!
- set str2=%%i
- for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
-
- if !str1!==onlinetimerecord (
- echo use !str2!^;>456.sql
- echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values >>456.sql
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
- sed -i "$s/,$/;/" 456.sql
- ) else (
- if !str1!==gmoperationrecord (
- echo use !str2!^;>456.sql
- echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values >>456.sql
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,>>456.sql
- sed -i "$s/,$/;/" 456.sql
- )
- pause
- )
复制代码
作者: hucuibai 时间: 2011-3-31 09:43
5# neorobin
刚刚看了下,我那个代码确实是少了个括号,这是失误,我源代码上面是有的,要不然也运行不了,现在的问题是我插入第二段代码到第一段代码里面去,就取不到全部文件的内容,就只能取到第一个文件,我把第二段代码放到了sed -i "$s/,$/;/" 456.sql这个一段下面,我搞不明白为什么?
作者: hucuibai 时间: 2011-3-31 11:12
5# neorobin
请帮忙再帮我看看,哪里出错了- @echo off&setlocal enabledelayedexpansion
- for /r F:\123 %%i in (*.txt) do (
- set str=%%~ni
- set str1=!str:~,-8!
- set str2=%%i
- for /f "tokens=3 delims=\" %%1 in ("!str2!") do set str2=%%1
-
- if !str1!==onlinetimerecord (
- >456.sql (
- echo use !str2!^;
- echo insert into onlinetimerecord^(PlayerID,AccountID,ClientType,OnlineTime,OfflineTime,LoginIP,DiamondLogin,DiamondLogoff^) values
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,
- )
-
- ) else (
-
-
- if !str1!==gmoperationrecord (
- >456.sql (
- echo use !str2!^;
- echo insert into gmoperation^(OperationTime,Operator,OperationCommand,Target^) values
- for /f "delims=" %%a in ('more %%i') do echo ^(%%a^)^,
- )
-
-
- )
- )
-
- sed -i "$s/,$/;/" 456.sql
- e:
- cd "Program Files\MySQL\MySQL Server 5.0\bin"
- mysql -u root -p123456 <F:\20110101\456.sql
- )
复制代码
作者: hucuibai 时间: 2011-3-31 11:48
搞定 原来要在最后面回到f盘才行 不然就会提示找不到文件,还是搞不清楚为什么
作者: neorobin 时间: 2011-3-31 20:54
本帖最后由 neorobin 于 2011-3-31 20:58 编辑
8# hucuibai
是被下面两行代码改变了工作路径的缘故:- e:
- cd "Program Files\MySQL\MySQL Server 5.0\bin"
复制代码
改成这样的看看且这行代码放在批处理首部即可,不要放在循环里多次运行)- path e:\Program Files\MySQL\MySQL Server 5.0\bin;%path%
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |