![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-03 10:52 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]批处理合并以时间命名的文件时遇到问题。 |
| 可打印版本 1,902 / 17 |
| 第1楼 bahaiyxl | 发表于 2007-02-11 04:29 |
| 初级用户 发帖 10 积分 22 | |
|
[求助]批处理合并以时间命名的文件时遇到问题。 遇到一个问题,有一个网站使用了负载均衡。生成的日志文件为3个以前一天的日期为名称的日志。
例如今天为2007-02-02,那么文件名为: web1-2007-02-01.log web2-2007-02-01.log web3-2007-02-01.log 由于此环境是使用windows2003的操作系统,而我以前接触的一直是linux。在linux下有软件可以满足这种要求。。但是windows下我没找到这种软件,所以只好使用批处理来作了。 刚才在坛子里搜索了一下,看到了两段和我要的差不多的脚本。 原贴在http://www.cn-dos.net/forum/viewthread.php?tid=24593 按照那里面的东西我写了一份脚本,内容如下: @echo off Rem 取1天之前的日期,取回放入变量nowdate echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k if %m% LSS 10 set m=0%m% if %d% LSS 10 set d=0%d% set nowdate=%y%-%m%-%d% copy /b web1-%nowdate%.log + web2-%nowdate%.log + web3-%nowdate%.log web-%nowdate%.log move web-%nowdate%.log d:/web/logs/web-%nowdate%.log 执行的效果有了,但是执行起来速度稍微有点慢。然后按照那个原贴里的方案改为 @echo off Rem 取1天之前的日期,取回放入变量nowdate echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do ( set y=%%i set m=%%j set d=%%k ) if %m% LSS 10 set m=0%m% if %d% LSS 10 set d=0%d% set nowdate=%y%-%m%-%d% copy /b web1-%nowdate%.log + web2-%nowdate%.log + web3-%nowdate%.log web-%nowdate%.log move web-%nowdate%.log d:/web/logs/web-%nowdate%.log 可是这样改完执行以后没有反应。因为才接触这个、很菜,不明白那里出错了。请各位帮忙指点一下。谢谢 [ Last edited by bahaiyxl on 2007-2-11 at 05:42 AM ] |
|
| 第2楼 slore | 发表于 2007-02-11 05:43 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@echo off
Rem 取1天之前的日期,取回放入变量nowdate echo D=split(dateadd("d",-1,Date),"-")>%tmp%\tmp.vbs echo If len(D(1))=1 then D(1)="0"+D(1)>>%tmp%\tmp.vbs echo If len(D(2))=1 then D(2)="0"+D(2)>>%tmp%\tmp.vbs echo wscript.echo D(0)+"-"+D(1)+"-"+D(2)>>%tmp%\tmp.vbs for /f %%i in ('cscript /nologo %tmp%\tmp.vbs') do set nowdate=%%i echo move web-%nowdate%.log d:/web/logs/web-%nowdate%.log pause>nul |
|
| 第3楼 bahaiyxl | 发表于 2007-02-11 06:11 |
| 初级用户 发帖 10 积分 22 | |
|
谢谢,我试试。。
|
|
| 第4楼 bahaiyxl | 发表于 2007-02-11 06:21 |
| 初级用户 发帖 10 积分 22 | |
|
谢谢,已经没有问题了。这个脚本直接执行还是不行,只好改了一下。。但是感觉改得不是很通。呵呵,还是对这个东西不是很理解。我再看看。。
现在的脚本是 @echo off Rem 取1天之前的日期,取回放入变量nowdate echo D=split(dateadd("d",-1,Date),"-")>%tmp%\tmp.vbs echo If len(D(1))=1 then D(1)="0"+D(1)>>%tmp%\tmp.vbs echo If len(D(2))=1 then D(2)="0"+D(2)>>%tmp%\tmp.vbs echo wscript.echo D(0)+"-"+D(1)+"-"+D(2)>>%tmp%\tmp.vbs for /f %%i in ('cscript /nologo %tmp%\tmp.vbs') do set nowdate=%%i copy /b web1-%nowdate%.log + web2-%nowdate%.log + web3-%nowdate%.log web-%nowdate%.log move web-%nowdate%.log d:/web/logs/web-%nowdate%.log echo move web-%nowdate%.log d:/web/logs/web-%nowdate%.log [ Last edited by bahaiyxl on 2007-2-11 at 06:29 AM ] |
|
| 第5楼 bahaiyxl | 发表于 2007-02-11 06:48 |
| 初级用户 发帖 10 积分 22 | |
|
还有一点请教一下,windows的批处理能否作到按日志内的时间进行合并,这些日志内部的内容已经是按照时间排序的。
例如 log1中内容如下: 111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:10:32:47 +0800] "GET /index.html HTTP/1.1" log2内容如下: 111.222.111.222 - - [03/Apr/2002:11:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:34:43 +0800] "GET /index.html HTTP/1.1" log3内容如下: 111.222.111.222 - - [03/Apr/2002:09:32:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:39:17 +0800] "GET /index.html HTTP/1.1" 现在这种方法合并下来是这样的: 111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:10:32:47 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:34:43 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:32:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:39:17 +0800] "GET /index.html HTTP/1.1" 这样的结果完全是按照文件的顺序加载的,没有按照日志内部的时间排序。 能否合并成: 111.222.111.222 - - [03/Apr/2002:09:32:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:39:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:10:32:47 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:34:43 +0800] "GET /index.html HTTP/1.1" ……搜了一下没有找到类似的信息。。实在不行就只能先将这个日志先传到linux下面,然后在那里面合下来再传回windows。呵呵 |
|
| 第6楼 slore | 发表于 2007-02-11 06:53 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@echo off
Rem 取1天之前的日期,取回放入变量nowdate echo D=split(dateadd("d",-1,Date),"-")>%tmp%\tmp.vbs echo If len(D(1))=1 then D(1)="0"+D(1)>>%tmp%\tmp.vbs echo If len(D(2))=1 then D(2)="0"+D(2)>>%tmp%\tmp.vbs echo wscript.echo D(0)+"-"+D(1)+"-"+D(2)>>%tmp%\tmp.vbs for /f %%i in ('cscript /nologo %tmp%\tmp.vbs') do set nowdate=%%i echo copy /b web1-%nowdate%.log + web2-%nowdate%.log + web3-%nowdate%.log web-%nowdate%.log>tep.bat echo move web-%nowdate%.log d:/web/logs/web-%nowdate%.log>>tep.bat tep.bat的内容是: copy /b web1-2007-02-09.log + web2-2007-02-09.log + web3-2007-02-09.log web-2007-02-09.log move web-2007-02-09.log d:/web/logs/web-2007-02-09.log 你什么地方有问题?那里不通? |
|
| 第7楼 slore | 发表于 2007-02-11 06:56 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
排序不是不可以.复杂而已.我P处理才接触呀!
set和for我还没搞明白呢...不好意思. |
|
| 第8楼 bahaiyxl | 发表于 2007-02-11 07:10 |
| 初级用户 发帖 10 积分 22 | |
|
因为开头你给的那个脚本直接执行还是不行,我以为那个就是可以直接运行的脚本了。但是没有理解透,所以只好一知半解的改了一下。感觉有点画蛇添足,呵呵。不过能出来,而且速度较快,我已经很知足了。
排序这个没有太大关系,已经很感谢了。实在不行我就放到linux下就行了。。还是觉得linux下的好使点儿,呵呵。 |
|
| 第9楼 slore | 发表于 2007-02-11 08:31 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你在windows用这个先~写的很简略.
你先看看吧. 把文件拖到程序上就可以了.:P 附件 SortStr.rar (37.2 KiB) |
|
| 第10楼 bahaiyxl | 发表于 2007-02-11 08:37 |
| 初级用户 发帖 10 积分 22 | |
|
thx,先看看
|
|
| 第11楼 bahaiyxl | 发表于 2007-02-11 08:39 |
| 初级用户 发帖 10 积分 22 | |
|
不太明白这个的用途。。再试试。。
[ Last edited by bahaiyxl on 2007-2-11 at 08:42 AM ] |
|
| 第12楼 slore | 发表于 2007-02-11 08:44 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
一个叫1.txt的文本,内容:
111.222.111.222 - - [03/Apr/2002:10:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:10:32:47 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:30:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:11:34:43 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:32:17 +0800] "GET /index.html HTTP/1.1" 111.222.111.222 - - [03/Apr/2002:09:39:17 +0800] "GET /index.html HTTP/1.1" 把1.txt拖到我的程序上,你看看. |
|
| 第13楼 bahaiyxl | 发表于 2007-02-11 08:49 |
| 初级用户 发帖 10 积分 22 | |
|
哦。。这个就是排序的。。挺好用的。呵呵。谢谢。
自动输出的好做么?好做的话还是麻烦弄个自动输出的吧,十分感谢。。覆盖原文件。 [ Last edited by bahaiyxl on 2007-2-11 at 08:56 AM ] |
|
| 第14楼 slore | 发表于 2007-02-11 13:22 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
不好意思忘了上传了.
小心使用哦,直接覆盖不备份....:cool: 附件 SortStr.rar (36.02 KiB) |
|
| 第15楼 namejm | 发表于 2007-02-12 11:41 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
楼主最好把具体的需求用文字写出来,光看代码是很吃力的一件事情——因为代码有时候并不能准确表达你的意图。
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |