Originally posted by qinchun36 at 2009-12-30 12:20 PM:
@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%%