|
feiying001
初级用户
积分 25
发帖 18
注册 2007-2-6
状态 离线
|
『楼 主』:
如何截取文件名字和路经并相应拷贝?
在这个文件中,如何截取Filename="pas4.stt"中的pas4.stt并拷贝到LocalPath="%BaseFolder%\Stat"中?注意是截取所有Filename=*并拷贝到相应的文件夹:LocalPath="%BaseFolder%\Stat",文件名字和路经并不完全相同,要根据内容进行提取
<UpdateFiles
UpdateDate="27122009 0036"
ObjectType="2=PAS4;3=BASE">
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%\Stat"
Filename="pas4.stt"
Body="OTk4MDY7MjAwOTEyMjcwMDM2DQo=" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="base.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="content_interpreter.kep" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="data.check.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="data.set.idn.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="data.set.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="database.kep" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="dnsblacklists.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="filtration.kep" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="gsg.kep" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="ke.ver" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="kis_ubllist_win.set.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="mcflt0912.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="profiles.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="profiles.kep" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="regexps.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="src.keb" />
<FileDescription
ComponentID="PAS4"
UpdateType="base"
LocalPath="%BaseFolder%"
Filename="upd_terms-full.keb" />
<Registry
ComponentID="CORE"
UpdateType="KLKEY"
LocalPath="%DSKM%"
Body="S0xyZwH6/39LTHN3AACtrQEAAAD8AwAAAwAAFgEBAAAJAYtxHipAAFRmJWNA5aPFbk1b/MyImbWBWLPZucpT1uiVdxqx0CHXFfg5tA4e1UKeb3AOtCV5PGcCc/iuoHuC+TNRi25sKFsBAB4JoQAAAAIAAigEAFBBUzQDAAIoBABCQVNFAQAACcY1zOINCjs6MTBLTXZKcUYzWFk3andnYTVEYWhrSnJYNDZUTTVFamw5OUdnVHFaa1g4Mld5emJBb1VlMnRIWEp6Q2djaGZqQlJyNTNOQ05IY1hDSzhsa2lmQWQ4VUNDUSUl"
Filename="pas4-0607g.pbv" />
<Registry
ComponentID="CORE"
UpdateType="REGISTRY"
LocalPath="%DSKM%"
Body="S0xyZwGhAABLTHN3AACtrQEAAAD8AwAAAQAAAAEAABRqEgABACAAoURUzG47ruFdRojVZ0UEM156ieIKUCGrpFoORxMLsXwgAHVbouakIWlTeUDihc96netgpH8sgGseT2RCL8ZM1/IiIADQxntIXmF/kkhvFoxayQw9Q0WHMbnZmWF9n7rb8GTKCyAAbQjqDP1HOtjaCo5LXQ+PUtcg6PlexG1YnTtenUDjRAkgAMVR74Nta2CPe5i1qc/JdtAT5tIO6+Xhz++JppcMx1I/IADcaCXTzdPFg23keiUkNVqoNzpvCSq7PElfvEXDiOaF1yAAT3dGWw9u1rF7LvU8dk2NK6wBt5u0603Gck1glFh34ysgAFs9Ta0OLNH8bbMe/vGuxGFerMllDr+j0DfhA4xGxGqAIADk2QHGjcSoLgQlA0Yh+BwoS03IRXSqEueU2XdSwYkM4iAANWfGeGX5Cr6M8Px32c+uMefkywK3wCCNH5CHEjMLdbsgALJkdtJg2wX/vtzQ+WmjWV8JmG1p6QNWB3DCP1PDSR9oIADTbpvs57tubQAcJ1Qq0gd09A8jyqzXVh5lRQluJqOZ3yAASkqqZbT6yvIWkyyvsEDZv6DPgbJHIB7M1rIWPmJrMHggAP3t0ckGPdZ4iaUi5+RoDwr5vx3/etsCqGZeEP/8IGPVIADGbaIKwULK6Vx5T4LcqWL4bby/fbYIGTwJgiHJKx7hxSAADPf2dloqgjbsHCSH5lh1tdsJSo3U4F75ujC9SSwjAUsgAKbG6CmFXGlZCARvzu2BHPBru08MzVQRdeADsu6oOO+gIABnFaWO2etk3CeJZ45jKmmEKOO+BtLUPS41SJH2FGahHQEAHgmhAAAAAQAACRgxW4INCjs6MTA0VGtWNE52bjdHZWVEaEsydnBrMnpBREk1TkthQ0Rua3NPdyswdmxybVQwUXNYd2RJVkFTd2d1Z3E2MWlveUN0M2cxVHdJSCsrTWtCMkxpWVduMUpqbiUl"
Filename="pas4-0607g.krg" />
</UpdateFiles>
;:10qKuOFLnyrCugmKr+9AQq7sequzrHR957HpnxL9vJ8qFB5TdxRaChybMp6ebvmqg2bUSmWoWjtz02360qZ/Q+ZZ%%
[ Last edited by feiying001 on 2009-12-28 at 21:09 ]
|
|
2009-12-28 21:07 |
|
|
feiying001
初级用户
积分 25
发帖 18
注册 2007-2-6
状态 离线
|
|
2009-12-29 12:52 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
3 楼』:
@echo off
setlocal enabledelayedexpansion
:: 设置你那个文件(应该是XML的吧)的路径
set ching=FILENAME.EXT
set /a n=0
echo ============ 分析开始 =============
for /f "tokens=2 delims== " %%i in ('findstr /i "localpath filename" !ching!') do (
set /a n+=1
set /a r=!n!%%2
if !r!==1 (
set d=%%i
) else (
set f=%%i
echo 正在复制 !f! 到 !d! ...
copy !f! !d!
)
)
echo ============ 分析结束 =============
set /a ching=!n!/2
echo.
echo 共执行了 !ching! 组复制操作!
pause>nul
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2009-12-30 12:20 |
|
|
feiying001
初级用户
积分 25
发帖 18
注册 2007-2-6
状态 离线
|
『第
4 楼』:
Quote: | Originally posted by qinchun36 at 2009-12-30 12:20 PM:
[code]
@echo off
setlocal enabledelayedexpansion
:: 设置你那个文件(应该是XML的吧)的路径
set ching=FILENAME.EXT
set /a n=0
echo ============ 分析开始 =============
fo ... |
|
思路及写的都非常好!这个文件是XML文件。不过不知道你注意了没有,ServerFolder=后面是路经名字,COPY的结果都写到一个文件里面了,不是在文件夹里面。
我修改如下:
@echo off
setlocal enabledelayedexpansion
:: 设置你那个文件(应该是XML的吧)的路径
set ching=bss-0607g.xml
set /a n=0
echo ============ 分析开始 =============
for /f "tokens=2 delims== " %%i in ('findstr /i "localpath filename" !ching!') do (
set /a n+=1
set /a r=!n!%%2
if !r!==1 (
set d=%%~i\
) else (
set f=%%~i
echo 正在复制 !f! 到 !d! ...
copy !f! !d!
)
)
echo ============ 分析结束 =============
set /a ching=!n!/2
echo.
echo 共执行了 !ching! 组复制操作!
pause>nul
这样就基本实现了我想要的效果,但在应用中我发现有的文件是这样的格式:
一、Filename="klif.sys"在前面,ServerFolder="9.0.0.459\sys\i386\5.1"在后面,有的并不是这样,请参考下面的内容
二、Filename="klif.sys"这个文件在复制中是有重复的,主要是根据系统不同进行的判断吧,怎么实现只取其中一个呢?重复的不再复制。
三、<Registry后面怎么进行排除?其实这里面的文件是不存在的
例子格式如下:
<UpdateFiles
UpdateDate="03122009 1044"
ObjectType="2=KAV9EXEC;3=BIN">
<FileDescription
Filename="klif.sys"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KAV 9.0.0.459; KIS 9.0.0.459"
ServerFolder="9.0.0.459\sys\i386\5.1"
FixName="a"
OS="Win-XP"
SysArch="i386"
LocalPath="%WINDIR%\System32\drivers"
ApplyPeriod="87600"
ApplyReaction="restart_os" />
<FileDescription
Filename="klif.sys"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KAV 9.0.0.459; KIS 9.0.0.459"
ServerFolder="9.0.0.459\sys\x64\5.2"
FixName="a"
OS="Win-XPx64"
SysArch="x64"
LocalPath="%WINDIR%\System32\drivers"
ApplyPeriod="87600"
ApplyReaction="restart_os" />
<FileDescription
Filename="oeas.dll"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KIS 9.0.0.736"
ServerFolder="9.0.0.736\x64"
FixName="a"
SysArch="x64"
LocalPath="%ProductFolder%\x64"
ApplyPeriod="168"
ApplyReaction="restart_os" />
<FileDescription
Filename="sbhook64.dll"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KIS 9.0.0.736"
ServerFolder="9.0.0.736\x64"
FixName="a"
OS="Win-Vista,7"
SysArch="x64"
LocalPath="%ProductFolder%\x64"
ApplyPeriod="168"
ApplyReaction="restart_os" />
<Registry
ComponentID="CORE"
UpdateType="KLKEY"
LocalPath="%DSKM%"
Body="S0xyZwH6/39LTHN3AACtrQEAAAD8AwAAAwAAFgEBAAAJAfU8HipAAFzn1lN6d7JrOuFZr0Ntsrj5hNME/jDXrSYsIbBFKoEaAaeVFSu49/RvrOjAIaFf4H+GMNLlZ5WfM8PzaxyIlDUBAB4JqgAAAAIAAigIAEtBVjlFWEVDAwACKAMAQklOAQAACfzXshQNCjs6MTBLNWNZS2dUUkpsUW44TThrTjIwT2tLYzZTcGNkZGZGdnp3Um1McVIvcVQ5anNqcnUrbC9LVmtoc1JBOTYxTko5TXorbmJqTjVjVUhTRlI5bHRUWnZvaCUl"
Filename="kav9exec-0607g.pbv" />
<Registry
ComponentID="CORE"
UpdateType="REGISTRY"
LocalPath="%DSKM%"
Body="S0xyZwGqAABLTHN3AACtrQEAAAD8AwAAAQAAAAEAABRqKAABACAAb5hFeUM1icaroNl8UWamkpanVfm82IeLOcJHeec2kXYgAIMtZGwVbtMKQhVdNULkAfqM70hObdh29Z4PvYlwjQOkIAA0XtB1JTby5rBzq3fpf77FMniNVIJnD5qp9sFMurH8jyAAhunJ708zV1aqiYX4ZGSQcsmctTkmEvT7CEHFqvQMee8gAB/kyNPr7HUxyat8j3PKiveKED0qQVKYyea9/UJdugCXIABSaKTKHSkBJKV1i2SYzi00TyTjzz1FW5MKUtpNIs4wwyAA0v20kvoPj1ZodjKvgUdTDuuych5xObyFNoOdlfd69dIgAEfxbsbQqt8JvQx7RMVSEjSqYbB0/VdVXCyUB0XZcNnAIACVF6Iw8xjeOHPiDA9Ci4BGgyh0fiEbPgkrmdJzwtFwCSAABBbvS/yQ
Filename="kav9exec-0607g.krg" />
</UpdateFiles>
;:10K1quDqc/zwnZzVTxVwlLU6euhaPrlEYeNk/ipz8K3460WzJ80BGrMocy76NcMabZ/1Sy1rhK5uNL0gIoUf3Odu%%
|
|
2009-12-30 13:48 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
5 楼』:
mht2html
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-12-30 16:22 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
6 楼』:
你说的去掉重复是什么意思?
比如你的 "klif.sys" 是随便复制一个,还是要根据 OS="Win-XP" 判断?
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2009-12-30 17:09 |
|
|
feiying001
初级用户
积分 25
发帖 18
注册 2007-2-6
状态 离线
|
『第
7 楼』:
是复制一个到另外目录中,只要 一个即可,因为这个文件其实是这样的:Filename=后面是文件名字
ServerFolder=后面是程序自己要备份的路经
LocalPath=是程序从何处进行拷贝进行备份
但有一个问题是程序自己要备份时是从它自己的服务器下载相应文件的,如klif.sys,它会下载所有支持的系统相应文件并放入不同的文件夹内,而我自己备份时只备份自己系统上的klif.sys文件,因为我备份时可能本机并不联网的,所以只取一个即可。
从下面这段字符就可以知道我的意思了
<FileDescription
Filename="klif.sys"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KAV 9.0.0.459; KIS 9.0.0.459"
ServerFolder="9.0.0.459\sys\i386\5.1"
FixName="a"
OS="Win-XP"
SysArch="i386"
LocalPath="%WINDIR%\System32\drivers"
ApplyPeriod="87600"
ApplyReaction="restart_os" />
<FileDescription
Filename="klif.sys"
ComponentID="KAV9Exec"
UpdateType="executable"
App="KAV 9.0.0.459; KIS 9.0.0.459"
ServerFolder="9.0.0.459\sys\x64\5.2"
FixName="a"
OS="Win-XPx64"
SysArch="x64"
LocalPath="%WINDIR%\System32\drivers"
ApplyPeriod="87600"
ApplyReaction="restart_os" />
我的意思是取Filename="klif.sys"中的klif.sys备份到LocalPath="%WINDIR%\System32\drivers"下面。也可以理解为恢复,因为我目前仅考虑实现的技术,做备份和恢复到时我做相应调整即可。从上面可以看到,要备份(恢复)的路经是相同的,而且此xml文件里面其实有很多段这样的情况,我拷贝例子时仅拷贝了一小部分内容。
[ Last edited by feiying001 on 2009-12-30 at 18:19 ]
|
|
2009-12-30 18:18 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
8 楼』:
还是没明白你对于重复的怎么搞。。。
我没办法用BAT搞定,给你写了个智能的脚本,你什么都不用准备,把下面的代码保存为 解析.hta ,双击运行,选择你要处理的文件,然后点“生成批处理”就能得到批处理代码了,自己保存为BAT吧,看看是不是你需要的效果
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
选择你要处理的XML文件:<input type="file" name="ching" id="ching" />
<input type="button" value="生成批处理" onclick="javascript:generate(ching.value);"/>
<script type="text/javascript">
var fso = new ActiveXObject("Scripting.FileSystemObject");
function readText(sFileName) {
var f = fso.OpenTextFile(sFileName);
return f.ReadAll();
}
function getFilePathMapping(sFileName){
var files = new Array();
var paths = new Array();
var text = readText(sFileName);
document.write(text);
var tmp1 = document.getElementsByTagName("FileDescription");
for(var i=0; i<tmp1.length; i++) {
var tmp2 = tmp1[i].outerHTML;
var tmp3 = tmp2.replace(/[\n\r]/g, "");
var tmp4 = tmp3.replace(/.*Filename[^\"]*(\"[^\"]*\").*/gi, "$1").replace(/\"/g, "");
var tmp5 = tmp3.replace(/.*LocalPath[^\"]*(\"[^\"]*\").*/gi, "$1").replace(/\"/g, "") + "\\" + tmp4;
var flag = 0;
for(var j = 0; j < files.length; j++) {
if(files[j] == tmp4) flag = 1;
}
if(flag==0) {
files.push(tmp4);
paths.push(tmp5);
}
}
return new Array(files, paths);
}
function generate(sFileName) {
var FP = getFilePathMapping(sFileName);
document.write("<h1 style='filter: blur(direction=135,strength=8); width: 600px; color: #990099; height: 10px'><font face='楷体_gb2312'>批处理代码</font></h1><br><br><br><div style='{background-color: #CC99CC;}'><pre>@echo off<br>::auto generated by qinchun36<br>");
for(var i=0; i<FP[0].length; i++) {
document.write("copy \"" + FP[0][i] + "\" \"" + FP[1][i] + "\"<br>");
}
document.write("</pre></div>");
}
</script>
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2009-12-30 20:32 |
|
|
feiying001
初级用户
积分 25
发帖 18
注册 2007-2-6
状态 离线
|
『第
9 楼』:
这个程序写的太好了!!!我正想达到这个效果!
不过根据你的代码经过修改也基本能达到我的需求。我所缺的就是SET参数不会循环调用。
学习了!!!
另外问一下:怎么给你的回答做加分呀?
另外有个帖子是别人引用的我第二次修改的批处理代码(卡巴斯基的备份工具)其中有的代码不完善,但由于工作太忙原因,我QQ:350345348很长时间没上,已经被收回了。等 我写好这个会发给大家交流的。
[ Last edited by feiying001 on 2009-12-30 at 21:32 ]
|
|
2009-12-30 21:17 |
|