|
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 |
|