![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 20:17 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何用批处理来实现这个功能 |
| 可打印版本 2,339 / 17 |
| 第1楼 tclshx | 发表于 2006-07-06 11:19 |
| 中级用户 发帖 64 积分 249 | |
|
如何用批处理来实现这个功能 我用的是一正版瑞星,想制作瑞星杀毒用的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的内容 FILECOUNT=13 ENGINEVER=17.00.00.36 VIRDEFVER=18.32.42.00 VIRDEFUPDATEDATE=2006-06-23 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 INFO=VirusLib.dll MEM=VirusLib.dll PTLIB=VirusLib.dll WLLIST=VirusLib.dll NVLIST=VirusLib.dll 再列出根据VIRUSDB.CFG手工创建的VERSION.INF的内容 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 ] |
|
| 第2楼 bagpipe | 发表于 2006-07-06 12:49 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
@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 两种应该都可以,就是搜索那改变了一下........... |
|
| 第3楼 fastslz | 发表于 2006-07-06 13:35 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
@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 >.\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 ] |
|
| 第4楼 fastslz | 发表于 2006-07-06 13:49 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
呵呵...和bagpipe相比我这个办法比较笨
不过我测试过了,路径请楼主添加,提示:当这个.\Rav\虚拟路径的完全路径是C:\Program Files\Rav会有错误提示的 |
|
| 第5楼 bagpipe | 发表于 2006-07-06 13:56 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
看的是方法,不是笨与不笨,大家思路不一样,结果一样就可以了,大家都是为了学习而来,也都是从笨开始学起的,所以都一样
|
|
| 第6楼 tclshx | 发表于 2006-07-06 15:39 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by bagpipe at 2006-7-6 12:49 PM: 二楼的结果是: VERSION.INF的内容为 VersionNo=~0,-3 UpdateDate= 三楼的结果是: VERSION.INF的内容为 VIRDEFVER=18.34.31.00 UpdateDate=2006-07-06 正确的应该是 VERSION.INF的内容为 VIRDEFVER=18.34.31 UpdateDate=2006-07-06 否则运行瑞星DOS杀毒的IMG时不能正确显示版本号(版本:18.34.31) |
|
| 第7楼 bagpipe | 发表于 2006-07-06 16:16 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
你先看看你的哪里出现问题了,别光顾着看结果,我在本机测试怎么没有出现你说的这种情况啊?
|
|
| 第8楼 tclshx | 发表于 2006-07-06 16:25 |
| 中级用户 发帖 64 积分 249 | |
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 >.\001\VERSION.INF echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF echo UpdateDate=%b%>>.\001\VERSION.IN 你的两个批处理都试了,结果VERSION.INF内容一样: VersionNo=~0,-3 UpdateDate= |
|
| 第9楼 bagpipe | 发表于 2006-07-06 17:21 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
我想问的是您“virusdb.cfg“这个文件的位置在哪里呢?
|
|
| 第10楼 tclshx | 发表于 2006-07-06 17:24 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by bagpipe at 2006-7-6 05:21 PM: virusdb.cfg文件是由批处理从RAV目录copy到001目录中的. |
|
| 第11楼 bagpipe | 发表于 2006-07-06 17:28 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
那他就是找不到那个文件
'findstr /C:"VIRDEFVER" /C:"VIRDEFUPDATEDATE" .001\virusdb.cfg'在试试,对了,问你一下,你什么系统? |
|
| 第12楼 tclshx | 发表于 2006-07-06 17:29 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by bagpipe at 2006-7-6 05:28 PM: XP_sp2 |
|
| 第13楼 bagpipe | 发表于 2006-07-06 17:31 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
你改了试试,这个就是找不到那个CFG文件的原因
|
|
| 第14楼 bagpipe | 发表于 2006-07-06 17:36 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
刚才路径错了,应该是 .\001\virusdb.cfg这样才对
|
|
| 第15楼 tclshx | 发表于 2006-07-06 17:37 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by bagpipe at 2006-7-6 05:31 PM: 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 >.\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 >.\001\VERSION.INF echo VersionNo=%a:~0,-3%>>.\001\VERSION.INF echo UpdateDate=%b%>>.\001\VERSION.INF 结果还是和没改前一样。 三楼的那个只是在结果中的版本号后多了".00"。它那个改进后可能行,但我不会。 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |