|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『楼 主』:
[求助]批处理合并以时间命名的文件时遇到问题。
遇到一个问题,有一个网站使用了负载均衡。生成的日志文件为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 ]
|
|
2007-2-11 04:29 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
2 楼』:
@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
|
|
2007-2-11 05:43 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
|
2007-2-11 06:11 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『第
4 楼』:
谢谢,已经没有问题了。这个脚本直接执行还是不行,只好改了一下。。但是感觉改得不是很通。呵呵,还是对这个东西不是很理解。我再看看。。
现在的脚本是
@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 ]
|
|
2007-2-11 06:21 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『第
5 楼』:
还有一点请教一下,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。呵呵
|
|
2007-2-11 06:48 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
6 楼』:
@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
你什么地方有问题?那里不通?
|
|
2007-2-11 06:53 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
排序不是不可以.复杂而已.我P处理才接触呀!
set和for我还没搞明白呢...不好意思.
|
|
2007-2-11 06:56 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『第
8 楼』:
因为开头你给的那个脚本直接执行还是不行,我以为那个就是可以直接运行的脚本了。但是没有理解透,所以只好一知半解的改了一下。感觉有点画蛇添足,呵呵。不过能出来,而且速度较快,我已经很知足了。
排序这个没有太大关系,已经很感谢了。实在不行我就放到linux下就行了。。还是觉得linux下的好使点儿,呵呵。
|
|
2007-2-11 07:10 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
9 楼』:
你在windows用这个先~写的很简略.
你先看看吧.
把文件拖到程序上就可以了.:P
附件
1: SortStr.rar (2007-2-11 08:31, 37.2 K, 下载附件所需积分 1 点
,下载次数: 13)
|
|
2007-2-11 08:31 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
|
2007-2-11 08:37 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『第
11 楼』:
不太明白这个的用途。。再试试。。
[ Last edited by bahaiyxl on 2007-2-11 at 08:42 AM ]
|
|
2007-2-11 08:39 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
12 楼』:
一个叫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拖到我的程序上,你看看.
|
|
2007-2-11 08:44 |
|
|
bahaiyxl
初级用户
积分 22
发帖 10
注册 2007-2-11
状态 离线
|
『第
13 楼』:
哦。。这个就是排序的。。挺好用的。呵呵。谢谢。
自动输出的好做么?好做的话还是麻烦弄个自动输出的吧,十分感谢。。覆盖原文件。
[ Last edited by bahaiyxl on 2007-2-11 at 08:56 AM ]
|
|
2007-2-11 08:49 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
14 楼』:
不好意思忘了上传了.
小心使用哦,直接覆盖不备份....:cool:
附件
1: SortStr.rar (2007-2-11 13:22, 36.02 K, 下载附件所需积分 1 点
,下载次数: 15)
|
|
2007-2-11 13:22 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
15 楼』:
楼主最好把具体的需求用文字写出来,光看代码是很吃力的一件事情——因为代码有时候并不能准确表达你的意图。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-2-12 11:41 |
|