中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [英雄求助帖]判断插入数字序列问题
« [1] [2] »
作者:
标题: [英雄求助帖]判断插入数字序列问题 上一主题 | 下一主题
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『楼 主』:  [英雄求助帖]判断插入数字序列问题

我有一包含数字的日志文件A.LOG,想通过批处理实现在产生的日志上增加数字序列

比如日志内容如下:

9/9 11:20:00.234 7cc Srv: StarWind Alcohol Edition iSCSI Target v3.2.3 (Build 20070527, Win32, Alcohol Edition)
9/9 11:20:00.234 7cc Srv: Built May 29 2007 00:57:30
9/9 11:20:00.234 7cc Srv: System CPU count: 1
9/9 11:20:00.234 7cc Srv: Unlimited number of client hosts allowed.
9/9 11:20:00.296 7cc Srv: Special build (plugins are disabled).
9/9 11:20:00.328 7cc Srv: Config file: 'StarWindLite.cfg'
9/9 11:20:01.718 7cc conf: 'LogLevel' = '1'
9/9 11:20:01.718 7cc conf: 'LogMask' = '0x8fffffff'
9/9 11:20:01.718 7cc conf: 'Port' = '3260'
9/9 11:20:01.718 7cc conf: 'Interface' = '0.0.0.0'
9/9 11:20:01.718 7cc conf: 'Login' = 'test'
9/9 11:20:01.718 7cc conf: 'Password' = '##CY9rzUYh03PK3k6DJie09g=='
9/9 11:20:01.718 7cc conf: 'MinBufferSize' = '65536'
9/9 11:20:01.718 7cc conf: 'AlignmentMask' = '0x0000'
9/9 11:20:01.718 7cc conf: 'MaxPendingRequests' = '64'
9/9 11:20:01.718 7cc conf: 'DefTargetName' = 'iqn.2003-06.com.rocketdivision.swl:$(host).$(symid)'
9/9 11:20:01.718 7cc conf: 'AllowOnlyRecordableCd' = 'no'
9/9 11:20:01.718 7cc conf: Variable 'LogLevel' is set to '1'.
9/9 11:20:01.718 7cc conf: Variable 'LogMask' is set to '0x8fffffff'.
9/9 11:20:01.718 7cc conf: Variable 'Port' is set to '3260'.
9/9 11:20:01.718 7cc conf: Variable 'Interface' is set to '0.0.0.0'.
9/9 11:20:01.718 7cc conf: Variable 'Login' is set to 'test'.
9/9 11:20:01.718 7cc conf: Variable 'Password' is set

通过批处理实现每增加一个日志前运行批处理可自己在日志上加序号,达到以下效果:

01
9/9 11:20:00.234 7cc Srv: StarWind Alcohol Edition iSCSI Target v3.2.3 (Build 20070527, Win32, Alcohol Edition)
9/9 11:20:00.234 7cc Srv: Built May 29 2007 00:57:30
9/9 11:20:00.234 7cc Srv: System CPU count: 1
9/9 11:20:00.234 7cc Srv: Unlimited number of client hosts allowed.

02
9/9 11:20:00.296 7cc Srv: Special build (plugins are disabled).
9/9 11:20:00.328 7cc Srv: Config file: 'StarWindLite.cfg'
9/9 11:20:01.718 7cc conf: 'LogLevel' = '1'
9/9 11:20:01.718 7cc conf: 'LogMask' = '0x8fffffff'
9/9 11:20:01.718 7cc conf: 'Port' = '3260'
9/9 11:20:01.718 7cc conf: 'Interface' = '0.0.0.0'

03
9/9 11:20:01.718 7cc conf: 'Login' = 'test'
9/9 11:20:01.718 7cc conf: 'Password' = '##CY9rzUYh03PK3k6DJie09g=='
9/9 11:20:01.718 7cc conf: 'MinBufferSize' = '65536'
9/9 11:20:01.718 7cc conf: 'AlignmentMask' = '0x0000'
9/9 11:20:01.718 7cc conf: 'MaxPendingRequests' = '64'

04
9/9 11:20:01.718 7cc conf: 'DefTargetName' = 'iqn.2003-06.com.rocketdivision.swl:$(host).$(symid)'
9/9 11:20:01.718 7cc conf: 'AllowOnlyRecordableCd' = 'no'
9/9 11:20:01.718 7cc conf: Variable 'LogLevel' is set to '1'.
9/9 11:20:01.718 7cc conf: Variable 'LogMask' is set to '0x8fffffff'.

05
9/9 11:20:01.718 7cc conf: Variable 'Port' is set to '3260'.
9/9 11:20:01.718 7cc conf: Variable 'Interface' is set to '0.0.0.0'.
9/9 11:20:01.718 7cc conf: Variable 'Login' is set to 'test'.
9/9 11:20:01.718 7cc conf: Variable 'Password' is set

以后自己每增加一次日志,通过批处理判断在文件中前面的序列号再追加新的序号!谢谢各位!

2007-10-21 16:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 2 楼』:  

英雄高手请出招,周末已经结束了!谢谢各位!

2007-10-21 19:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 3 楼』:  

主要是没太看懂你的工作流程.



致精致简!
2007-10-21 19:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by 26933062 at 2007-10-21 19:29:
主要是没太看懂你的工作流程.

又是老哥你看到了呀?
就是大比方我有个批处理如下:

@echo off
生成序列数程序>>1.txt
dir>>1.txt

以后执行这个批处理就可以追加序列好,1.txt效果如下

01
2007-03-23  下午 05:19             1,024 .rnd
2006-11-07  上午 01:15    <DIR>          Documents and Settings
2006-11-07  上午 01:33    <DIR>          Program Files
2006-11-07  上午 01:06    <DIR>          WINDOWS

02
2007-03-23  下午 05:19             1,024 .rnd
2006-11-07  上午 01:15    <DIR>          Documents and Settings
2006-11-07  上午 01:33    <DIR>          Program Files
2006-11-07  上午 01:06    <DIR>          WINDOWS

2007-10-21 19:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 5 楼』:  

说通俗点就是写个序列号生成器,可以自动判断文本中前面已经有的序列号,然后再追加连续序列号到文本里面,希望老哥能帮忙!谢谢!

2007-10-21 19:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

问题是你每次生成序列号后又如何?
你的1.txt里的内容是从哪里来的?
每次都是在1.txt生成序列号,然后再把a.log的内容copy过来吗?我想不是吧?
你这个批处理的功能还是没说清楚啊



致精致简!
2007-10-21 19:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 7 楼』:  

每次都是在1.txt生成序列号,然后再把a.log的内容copy过来,就是这个意思!呵呵,我的表诉能力太差了!有劳老哥!

2007-10-21 19:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 8 楼』:  

我有个思路,那位大哥帮改改!?
@echo off
setlocal enabledelayedexpansion
set/a n=1
:redo
type 1.txt|find "第!n!个方案" (set/a n+=1 && goto redo)
echo 第%n%个方案>>1.txt
endlocal

2007-10-21 21:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 9 楼』:  

就是达到以下效果

@echo off
if not exist %date% md %date%
setlocal enabledelayedexpansion
set/a n=1
:redo
if exist %date%\!n! (set/a n+=1 && goto redo)
cd.>%date%\%n%
echo 第%n%个方案>>%date%方案.txt
endlocal
type a.log>>%date%方案.txt

以上虽然勉强实现功能,但是由于会生成临时文件,还有如果删除临时文件此程序又重头计数,很不方便,请高手支招!谢谢!

2007-10-21 22:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

临时文件是个方法,还可以在注册表里面新建一个值,每次来读这个注册表值也行。

2007-10-21 22:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 11 楼』:  

看你的1.txt文件有个特点:
    就是只有序号这一行是单独一行的.
    也就是说,除了序号的行以外,其它的行,都是"内容+空格+内容",
    唯独有序号的行是"内容"后面没有空格+内容.
    不知道这么说你看的明白不?
@echo off
for /f "delims=" %%a in (1.txt) do (
for /f "tokens=1* delims= " %%b in ("%%a") do (
if "%%c"=="" set var=%%b
))
if "%var:~0,1%"=="0" (set /a var=%var:~1%+1) else set /a var+=1
set num=00%var%
echo %num:~-2%>>1.txt
type a.log>>1.txt
pause




致精致简!
2007-10-22 01:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  

还有一个办法,就是在你第一次运行的时候,先手动把下一个序号写到1.txt的最下面
以后每次就可以自动把下一个序号提前写在1.txt的最后.

我认为这个比上一个好,不容易出错些

如上1.txt内容就变成

01
2007-03-23  下午 05:19             1,024 .rnd
2006-11-07  上午 01:15    <DIR>          Documents and Settings
2006-11-07  上午 01:33    <DIR>          Program Files
2006-11-07  上午 01:06    <DIR>          WINDOWS

02
2007-03-23  下午 05:19             1,024 .rnd
2006-11-07  上午 01:15    <DIR>          Documents and Settings
2006-11-07  上午 01:33    <DIR>          Program Files
2006-11-07  上午 01:06    <DIR>          WINDOWS

03
@echo off
for /f "delims=" %%a in (1.txt) do set var=%%a
if "%var:~0,1%"=="0" (set /a var=%var:~1%+1) else set /a var+=1
set num=00%var%
type a.log>>1.txt
echo.>>1.txt
echo %num:~-2%>>1.txt
pause
[ Last edited by 26933062 on 2007-10-22 at 04:57 PM ]



致精致简!
2007-10-22 01:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by 26933062 at 2007-10-22 01:31:
还有一个办法,就是在你第一次运行的时候,先手动把下一个序号写到1.txt的最下面
以后每次就可以自动把下一个序号提前写在1.txt的最后 ...

老哥,可能我没表述清楚,就是自动加序列号到文本里,并判断文本里已经有的序列号然后递增!您看看我写的那个好吗?帮我看看能怎么实现不要临时文件

2007-10-22 22:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbby
中级用户





积分 220
发帖 99
注册 2005-8-16
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by lxmxn at 2007-10-21 22:47:
临时文件是个方法,还可以在注册表里面新建一个值,每次来读这个注册表值也行。

请求版主也出手襄助!不胜感激!

2007-10-22 22:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 15 楼』:  

晕死
12 楼的不是么?
你不会没有测试吧?



致精致简!
2007-10-22 22:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: