中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用批处理来实现这个功能
« [1] [2] »
作者:
标题: 如何用批处理来实现这个功能 上一主题 | 下一主题
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『楼 主』:  如何用批处理来实现这个功能

我用的是一正版瑞星,想制作瑞星杀毒用的IMG文件,关键是提取RISING\RAV中的病毒库文件,病毒库文件为:8个def文件(VirBoot.def、VIRCOM.def、VirInfo.def、VirMacr.def、VirMZ.def、VirNorm.def、VirPe.def、VirSct.def),15个dll文件(engine.dll、extFile.dll、ExtMail.dll、ExtOLE.dll、libload.dll、RsStore.dll、ScanEX.dll、ScanExec.dll、ScanMac.dll、ScanSct.dll、slang936.dll、UnExe.dll、vdp.dll、、VirusLib.dll、Zip.DLL)
还有一个virusdb.cfg文件,且要根据virusdb.cfg文件的内容(每升级一次,内容中的日期和版本号会不同)创建一个Version.inf文件。
在此我列出06年6月26日升级后的virusdb.cfg的内容
[SUMMARY]
FILECOUNT=13
ENGINEVER=17.00.00.36
VIRDEFVER=18.32.42.00
VIRDEFUPDATEDATE=2006-06-23

[FILES]
COM=VirCom.def
MZ=VirMZ.def
PE=VirPe.def
MACRO=VirMacr.def
SCRIPT=VirSct.def
NORMAL=VirNorm.def
BOOT=VirBoot.def
ELF=VirElf.def
INFO=VirInfo.def
MEM=SysMem.def
PTLIB=Posttrt.def
WLLIST=wllib.def
NVLIST=nvlib.def

[PLUGINS]
INFO=VirusLib.dll
MEM=VirusLib.dll
PTLIB=VirusLib.dll
WLLIST=VirusLib.dll
NVLIST=VirusLib.dll
再列出根据VIRUSDB.CFG手工创建的VERSION.INF的内容
[Version]
VersionNo=18.32.42
UpdateDate=2006-06-23

   VERSION.INF文件是用来显示版本号的。每次都要手工创建VERSION.INF,很麻烦,想通过批处理来实现,哪位好心人帮一下忙!

以下是我放在RISING目录下用来提取病毒文件的批处理,只需在后面加上创建VERSION.INF文件的功能就行了。创建的VERSION.INF也要在001目录中。
MD 001
COPY /Y .\Rav\VirBoot.def .\001
COPY /Y .\Rav\VirCom.def .\001
COPY /Y .\Rav\VirInfo.def .\001
COPY /Y .\Rav\VirMacr.def .\001
COPY /Y .\Rav\VirMZ.def .\001
COPY /Y .\Rav\VirPe.def .\001
COPY /Y .\Rav\VirSct.def .\001
COPY /Y .\Rav\ENGINE.DLL .\001
COPY /Y .\Rav\EXTFILE.DLL .\001
COPY /Y .\Rav\EXTMAIL.DLL .\001
COPY /Y .\Rav\EXTOLE.DLL .\001
COPY /Y .\Rav\LIBLOAD.DLL .\001
COPY /Y .\Rav\RsStore.dll .\001
COPY /Y .\Rav\ScanEx.dll .\001
COPY /Y .\Rav\SCANEXEC.DLL .\001
COPY /Y .\Rav\SCANMAC.DLL .\001
COPY /Y .\Rav\SCANSCT.DLL .\001
REM COPY /Y .\Rav\sLang936.dll .\001
COPY /Y .\Rav\Unexe.dll .\001
COPY /Y .\Rav\VDP.DLL .\001
COPY /Y .\Rav\VirusLib.dll .\001
COPY /Y .\Rav\ZIP.DLL .\001
COPY /Y .\Rav\VirNorm.def .\001
COPY /Y .\Rav\VIRUSDB.CFG .\001

[ Last edited by tclshx on 2006-7-6 at 11:39 ]

2006-7-6 11:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

@echo off
setlocal
for /f "tokens=2 delims==" %%a in ('findstr /c:"VIRDEFVER" /c:"VIRDEFUPDATEDATE" virusdb.cfg') do (
if defined a (set b=%%a) else set a=%%a
)
echo [Version]>.\001\VERSION.INF
echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF      
echo UpdateDate=%b%>>.\001\VERSION.INF



@echo off
setlocal
for /f "tokens=2 delims==" %%a in ('findstr "VIRDEFVER VIRDEFUPDATEDATE" virusdb.cfg') do (
if defined a (set b=%%a) else set a=%%a
)
echo [Version]>.\001\VERSION.INF
echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF      
echo UpdateDate=%b%>>.\001\VERSION.INF


两种应该都可以,就是搜索那改变了一下...........

2006-7-6 12:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:  

@echo off
set Version=VIRDEFVER
find /i virusdb.cfg "%Version%"
if not errorlevel 1 set Version=VersionNo
for /F "tokens=1 delims=VIRDEFVER " %%A in ('find /i .\Rav\virusdb.cfg "VIRDEFVER"') do set No=%%A
for /F "tokens=1 delims=VIRDEFUPDATEDATE " %%B in ('find /i .\Rav\virusdb.cfg "VIRDEFUPDATEDATE"') do set DATENO=%%B
echo [Version]>.\001\VERSION.INF
echo %Version%%NO%>>.\001\VERSION.INF
echo UpdateDate%DATENO%>>.\001\VERSION.INF

[ Last edited by fastslz on 2006-7-6 at 13:53 ]

2006-7-6 13:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

呵呵...和bagpipe相比我这个办法比较笨
不过我测试过了,路径请楼主添加,提示:当这个.\Rav\虚拟路径的完全路径是C:\Program Files\Rav会有错误提示的

2006-7-6 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 5 楼』:  

看的是方法,不是笨与不笨,大家思路不一样,结果一样就可以了,大家都是为了学习而来,也都是从笨开始学起的,所以都一样

2006-7-6 13:56
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-6 12:49 PM:
@echo off
setlocal
for /f "tokens=2 delims==" %%a in ('findstr /c:"VIRDEFVER" /c:"VIRDEFUPDATEDATE" virusdb.cfg') do (
if defined a (set b=%%a) else set a=%%a
)
e ...

二楼的结果是:
VERSION.INF的内容为
[Version]
VersionNo=~0,-3      
UpdateDate=

三楼的结果是:
VERSION.INF的内容为
[Version]
VIRDEFVER=18.34.31.00
UpdateDate=2006-07-06

正确的应该是
VERSION.INF的内容为
[Version]
VIRDEFVER=18.34.31
UpdateDate=2006-07-06
否则运行瑞星DOS杀毒的IMG时不能正确显示版本号(版本:18.34.31)

2006-7-6 15:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 7 楼』:  

你先看看你的哪里出现问题了,别光顾着看结果,我在本机测试怎么没有出现你说的这种情况啊?

2006-7-6 16:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-6 04:16 PM:
你先看看你的哪里出现问题了,别光顾着看结果,我在本机测试怎么没有出现你说的这种情况啊?

我的瑞星是装在D盘的,我把这个批处理放在RISING目录下,RAV目录也在这个目录下.
我全部批处理如下:
@echo off
MD 001
COPY /Y .\Rav\VirBoot.def .\001
COPY /Y .\Rav\VirCom.def .\001
COPY /Y .\Rav\VirInfo.def .\001
COPY /Y .\Rav\VirMacr.def .\001
COPY /Y .\Rav\VirMZ.def .\001
COPY /Y .\Rav\VirPe.def .\001
COPY /Y .\Rav\VirSct.def .\001
COPY /Y .\Rav\ENGINE.DLL .\001
COPY /Y .\Rav\EXTFILE.DLL .\001
COPY /Y .\Rav\EXTMAIL.DLL .\001
COPY /Y .\Rav\EXTOLE.DLL .\001
COPY /Y .\Rav\LIBLOAD.DLL .\001
COPY /Y .\Rav\RsStore.dll .\001
COPY /Y .\Rav\ScanEx.dll .\001
COPY /Y .\Rav\SCANEXEC.DLL .\001
COPY /Y .\Rav\SCANMAC.DLL .\001
COPY /Y .\Rav\SCANSCT.DLL .\001
REM COPY /Y .\Rav\sLang936.dll .\001
COPY /Y .\Rav\Unexe.dll .\001
COPY /Y .\Rav\VDP.DLL .\001
COPY /Y .\Rav\VirusLib.dll .\001
COPY /Y .\Rav\ZIP.DLL .\001
COPY /Y .\Rav\VirNorm.def .\001
COPY /Y .\Rav\VIRUSDB.CFG .\001

setlocal
for /f "tokens=2 delims==" %%a in ('findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" virusdb.cfg') do (if defined a (set b=%%a) else set a=%%a)
echo [Version]>.\001\VERSION.INF
echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF      
echo UpdateDate=%b%>>.\001\VERSION.IN

你的两个批处理都试了,结果VERSION.INF内容一样:
[Version]
VersionNo=~0,-3      
UpdateDate=

2006-7-6 16:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 9 楼』:  

我想问的是您“virusdb.cfg“这个文件的位置在哪里呢?

2006-7-6 17:21
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-6 05:21 PM:
我想问的是您“virusdb.cfg“这个文件的位置在哪里呢?

virusdb.cfg文件是由批处理从RAV目录copy到001目录中的.

2006-7-6 17:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 11 楼』:  

那他就是找不到那个文件
'findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" .001\virusdb.cfg'在试试,对了,问你一下,你什么系统?

2006-7-6 17:28
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-6 05:28 PM:
那他就是找不到那个文件
'findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" .001\virusdb.cfg'在试试,对了,问你一下,你什么系统?

XP_sp2

2006-7-6 17:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 13 楼』:  

你改了试试,这个就是找不到那个CFG文件的原因

2006-7-6 17:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 14 楼』:  

刚才路径错了,应该是  .\001\virusdb.cfg这样才对

2006-7-6 17:36
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tclshx
中级用户




积分 249
发帖 64
注册 2005-6-3
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-6 05:31 PM:
你改了试试,这个就是找不到那个CFG文件的原因

setlocal
for /f "tokens=2 delims==" %%a in ('findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" virusdb.cfg') do (if defined a (set b=%%a) else set a=%%a)
echo [Version]>.\001\VERSION.INF
echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF      
echo UpdateDate=%b%>>.\001\VERSION.IN
改成
setlocal
for /f "tokens=2 delims==" %%a in ('findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" .001\virusdb.cfg') do (if defined a (set b=%%a) else set a=%%a)
echo [Version]>.\001\VERSION.INF
echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF      
echo UpdateDate=%b%>>.\001\VERSION.INF

结果还是和没改前一样。

三楼的那个只是在结果中的版本号后多了".00"。它那个改进后可能行,但我不会。

2006-7-6 17:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: