|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
16 楼』:
Quote: | @echo off
call :reset
for /f "tokens=2 delims==" %%a in ('findstr /i "serverfolder filename" a.xml') do (
if not defined serverfolder (set "serverfolder=%%~a") else (
if not defined filename set "filename=%%~a" & call :start
)
)
goto :eof
md D:\AVP\%serverfolder%
:start
set "serverfolder=%serverfolder:~6%
copy %filename% D:\AVP\%serverfolder%
:reset
set "serverfolder="
set "filename="
pause
exit |
|
其中的 md D:\AVP\%serverfolder% 不是写在那里的;
否则根本就执行不到这一句;
写在copy前面;
:start标签的里面;
还有 我把你在一楼贴的代码保存为 a.xml;
如果不是的请自行修改代码红色部分
导致问题的根本原因是因为你加上的pause&exit
好好读读源码
第一行是call :reset
执行reset时你加了pause&pause不直接退出干吗..
根据你的意思修改了下
@echo off
md D:\AVP\%serverfolder%
call :reset
for /f "tokens=2 delims==" %%a in ('findstr /i "serverfolder filename" a.xml') do (
if not defined serverfolder (set "serverfolder=%%~a") else (
if not defined filename set "filename=%%~a" & call :start
)
)
pause & exit
:start
set "serverfolder=%serverfolder:~6%
copy %filename% D:\AVP\%serverfolder%
:reset
set "serverfolder="
set "filename=" [ Last edited by bjsh on 2007-5-23 at 04:09 PM ]
|
|
2007-5-23 11:40 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
17 楼』:
use sed+bat
@echo off
sed -n "/Filename=/p;/ServerFolder/p" urfile.xml|sed "N;s,^[ \t]*ServerFolder=\(.*\)\n[ \t]*Filename=\(.*\),copy /y \2 \1,g"|sed "s,/,\\,2g"|more>news.bat
call news.bat
|
|
2007-5-23 13:18 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
18 楼』:
Quote: | Originally posted by bjsh at 2007-5-23 11:40 AM:
其中的 md D:\AVP\%serverfolder% 不是写在那里的;
否则根本就执行不到这一句;
写在copy前面;
:start标签的里面;
还有 我把你在一楼贴的代码保存为 a. ... |
|
你的这个程序,运行后,提示:系统找不到指定文件。如果这个程序的工具和文件不在一起的话,它会提示:打不开xml文件
|
|
2007-5-23 13:39 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
19 楼』:
Quote: | Originally posted by lxmxn at 2007-5-23 01:18 PM:
[code]@echo off
sed -n "/Filename=/p;/ServerFolder/p" urfile.xml|sed "N;s,^[ \t]*ServerFolder=\(.*\)\n[ \t]*Filename=\(.*\),copy /y \2 \1,g"|sed "s,/,\\,2g"|more>n ... |
|
这个实在高深。。没看懂。。
试运行后,界面一闪而过。。
可能我的主题还不是讲的很清楚。在这说一下更详细的。。
一、从电脑中复制文件u0607g.xml。里面包含所有*0607g.xml文件的信息。如下:
<UpdateFiles
UpdateDate="21052007 0215">
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/av/avc/i386"
Filename="av-i386-0607g.xml"
FileDate="21052007 0057" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/as/kis"
Filename="as-0607g.xml"
FileDate="21052007 0202" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/ids/i386"
Filename="ah-i386-0607g.xml"
FileDate="18052007 1408" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/ids/x64"
Filename="ah-x64-0607g.xml"
FileDate="18052007 1418" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/ids/i386-x64"
Filename="ah-i386-x64-0607g.xml"
FileDate="18052007 1427" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/aspy"
Filename="aspy-0607g.xml"
FileDate="10052007 1553" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/blst"
Filename="blst-0607g.xml"
FileDate="16052007 1210"
MD5="yXVPXuP1jjOFyuoWtE04UA==" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/av/klava/webav"
Filename="wm-0607g.xml"
FileDate="09032007 0721" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/pdm"
Filename="pdm-0607g.xml"
FileDate="18052007 1432" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/upd"
Filename="upd-0607g.xml"
FileDate="10042007 1431" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/info"
Filename="info-0607g.xml"
FileDate="10052007 1333" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/pcdb"
Filename="pcdb-0607g.xml"
FileDate="11052007 1547" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/av/klava/emu/i386"
Filename="emu-i386-0607g.xml"
FileDate="16052007 1706" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/av/klava/wa/i386"
Filename="wa-i386-0607g.xml"
FileDate="10052007 0755" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav6"
Filename="kav6-0607g.xml"
FileDate="20022007 1213" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_aol"
Filename="kav_aol-0607g.xml"
FileDate="02042007 1140" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_dt"
Filename="kav_dt-0607g.xml"
FileDate="27022007 1109" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_jp"
Filename="kav_jp-0607g.xml"
FileDate="16042007 1153" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_kpss"
Filename="kav_kpss-0607g.xml"
FileDate="26042007 0817" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_mais"
Filename="kav_mais-0607g.xml"
FileDate="12032007 1024" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_pcss"
Filename="kav_pcss-0607g.xml"
FileDate="13042007 1411" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_rss"
Filename="kav_rss-0607g.xml"
FileDate="26042007 1117" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_stg"
Filename="kav_stg-0607g.xml"
FileDate="12032007 0939" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../AutoPatches/kav_xss"
Filename="kav_xss-0607g.xml"
FileDate="12032007 0939" />
<FileDescription
Comp
UpdateType="desc"
ServerFolder="../../bases/rt"
Filename="rt-0607g.xml"
FileDate="07022007 1106" />
<Registry
Comp
UpdateType="KLKEY"
LocalPath="%DSKM%"
从电脑中复制上面所有的Filename文件,并保存在每个文件所对应的ServerFolder路径中。在这里,将
路径统一为这种形式:
AVP——index/6
│
├─bases——/av/avc/i386
│ │-/as/kis
│ │-/ids/i386
│ │-/ids/x64
│ │-/ids/i386-x64
│ │-/aspy
│ │-/blst
│ │-/av/klava/webav
│ │-/pdm
│ │-/upd
│ │-/info
│ │-/pcdb
│ │-/av/klava/emu/i386
│ │-/av/klava/wa/i386
│ │-/rt
│
└─AutoPatches——/kav6
│-/kav_aol
│-/kav_dt
│-/kav_jp
│-/kav_kpss
│-/kav_mais
│-/kav_pcss
│-/kav_rss
│-/kav_stg
│-/kav_xss
二、读取刚才所保存的每个xml文件,根据里面的内容(主要是文件),从电脑中复制所有文件到当前目录中。比如说:
upd-0607g.xml这个文件,它就存放在路径AVP/bases/upd子文件夹里面,读取它的内容为:
<UpdateFiles
UpdateDate="10042007 1431">
<FileDescription
Comp
UpdateType="base"
LocalPath="%DataFolder%"
Filename="updcfg.xml"
FileSize="20586" />
<Registry
Comp
UpdateType="REGISTRY"
LocalPath="%DSKM%",
然后,将updcfg.xml这个文件从电脑中也复制到当前目录下,即AVP/bases/upd里面。
[ Last edited by nbic on 2007-5-23 at 01:47 PM ]
|
|
2007-5-23 13:46 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
20 楼』:
汗一个...
问问题就把问题说清楚,不要别人给了答案又来一个不符合要求。
|
|
2007-5-23 14:23 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
21 楼』:
Quote: | Originally posted by nbic at 2007-5-23 01:39 PM:
你的这个程序,运行后,提示:系统找不到指定文件。如果这个程序的工具和文件不在一起的话,它会提示:打不开xml文件 |
|
那个程序必须和a.xml以及欲复制的文件在同一个目录下;
否则如果找不到a.xml则显示:
无法打开a.xml
如果欲复制的文件没在当前目录;自然出现"系统找不到指定文件"
|
|
2007-5-23 16:14 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
22 楼』:
Quote: | Originally posted by bjsh at 2007-5-23 04:14 PM:
那个程序必须和a.xml以及欲复制的文件在同一个目录下;
否则如果找不到a.xml则显示:
无法打开a.xml
如果欲复制的文件没在当前目录;自然出现"系统找不到指定文件" |
|
用如下程序。
@echo off
call :reset
for /f "tokens=2 delims==" %%a in ('findstr /i "serverfolder filename" a.xml') do (
if not defined serverfolder (set "serverfolder=%%~a") else (
if not defined filename set "filename=%%~a" & call :start
)
)
pause & exit
:start
set "serverfolder=%serverfolder:~6%
md D:\AVP\%serverfolder%
copy %filename% D:\AVP\%serverfolder%
:reset
set "serverfolder="
set "filename="
提示语法不正确。。
此程序和a.xml文件,以及a.xml里面所涉及的文件都在同一个文件夹里面。。
|
|
2007-5-23 18:25 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
23 楼』:
怪我了;
怪我当时一粗心复制代码时set "serverfolder=%serverfolder:~6%
后面少了个引号;
而且当时写的时候
只写了echo %filename% 将被复制到 %serverfolder%
而没注意到%serverfolder%里的斜杠是反的;
修正代码如下;
@echo off
call :reset
for /f "tokens=2 delims==" %%a in ('findstr /i "serverfolder filename" a.xml') do (
if not defined serverfolder (set "serverfolder=%%~a") else (
if not defined filename set "filename=%%~a" & call :start
)
)
pause&exit
:start
set "serverfolder=%serverfolder:~6%"
set "serverfolder=%serverfolder:/=\%"
md c:\AVP\%serverfolder%
copy %filename% c:\AVP\%serverfolder%
:reset
set "serverfolder="
set "filename=" 测试结果如下:
至于少了——index/6这一支是因为你的xml也没有这个路径;
可以自行添加;
Quote: | c:\AVP>tree
文件夹 PATH 列表
卷序列号码为 0007F00C 45A6:9F99
C:.
├─bases
│ ├─av
│ │ ├─avc
│ │ │ └─i386
│ │ └─klava
│ │ ├─webav
│ │ ├─emu
│ │ │ └─i386
│ │ └─wa
│ │ └─i386
│ ├─as
│ │ └─kis
│ ├─ids
│ │ ├─i386
│ │ ├─x64
│ │ └─i386-x64
│ ├─aspy
│ ├─blst
│ ├─pdm
│ ├─upd
│ ├─info
│ ├─pcdb
│ └─rt
└─AutoPatches
├─kav6
├─kav_aol
├─kav_dt
├─kav_jp
├─kav_kpss
├─kav_mais
├─kav_pcss
├─kav_rss
├─kav_stg
└─kav_xss |
|
[ Last edited by bjsh on 2007-5-23 at 08:28 PM ]
|
|
2007-5-23 20:17 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
24 楼』:
Quote: | Originally posted by bjsh at 2007-5-23 08:17 PM:
怪我了;
怪我当时一粗心复制代码时set "serverfolder=%serverfolder:~6%
后面少了个引号;
而且当时写的时候
只写了echo %filename% 将被复制到 %serverfolder%
... |
|
刚才试了试。。可以啊。。呵呵
不过,工具要和a.xml以及a.xml里面的filename在同一个文件夹里面,才可以完成解读和复制功能。。能不能,将工具当独抽出来,然后对所有xml文件进行解读和复制操作呢?
还有个问题,a.xml文件之前,能不能加路径啊?如果可以的话,那么工具是不是可以当独放到文件夹外面啊?
|
|
2007-5-23 21:07 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
25 楼』:
是的;只要给a.xml和filename指定路径;
这个程序放哪都可以了;
其实和他们放一起不过是因为省略了当前路径而已;
限定路径后;就无所谓放哪了.
|
|
2007-5-23 22:27 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
26 楼』:
刚才我发完帖自己试了试。可以。。不错。。
因为xml的文件不是都在一个文件夹里面。而且,每个xml文件里面的内容所涉及的文件也不都在同一个文件夹里面。现在我想这样来处理。。
1、先将所有*0607g.xml的文件用xcopy复制到一个文件夹里面;
2、利用上面的程序,来进行xml文件的读取和复制操作。
现在有个问题。能不能将所有xml文件都和a.xml放在一起。那么进行读取和复制操作时,全部一起完成?如果不能。那么是不是重复上面的程序,只要将a.xml改改名称,将其里面所涉及的文件的路径再改改就行?
|
|
2007-5-23 22:42 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
27 楼』:
请教一下:set "serverfolder=%serverfolder:~6%"在这里的用处?
为什么不可以直接copy %filename% %serverfolder%
|
|
2007-5-24 00:29 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
28 楼』:
起初serverfolder取得的值为这种形式:
../../bases/info
我用%serverfolder:~6%获得bases/info去掉前面的省略号;
但是现在看来确实是多余的;
直接把'/'替换为'\'即可
这是一种错误的说法
实际上 md c:\avp\bases\info
和md c:\avp\..\..\bases\info 是不同的;后者会把目录建在c:\下而不是AVP下;
实际上 c:\avp\..\bases\info也可以把目录健在c:\
\..表示上一层目录;
\..\..表示上两层目录;
比如 md c:\avp\bases\..\..\t
会把t文件夹建立在c:\目录下
而 md c:\avp\bases\..\t会把 t文件夹建立在 c:\avp\ 下
[ Last edited by bjsh on 2007-5-24 at 12:41 PM ]
|
|
2007-5-24 06:20 |
|
|
nbic
初级用户
积分 135
发帖 61
注册 2007-4-14
状态 离线
|
『第
29 楼』:
现在碰到一个问题。由于我完成a.xml里面文件的复制后,要接着进行其它xml文件的操作时。我采用重复利用操作a.xml文件时的程序(当然,将里面的一些内容小改了下,如:文件名、路径之类)。结果运行时发现,不但其它的重复程序不能完成任务,而且最初的那个操作a.xml文件的程序也出现问题,不能完成复制。。
这个问题该如何解决啊?
如果不用重复利用操作a.xml 时的程序,那么,在操作别的xml 文件时,该怎么写程序呢?
|
|
2007-5-24 07:30 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
30 楼』:
而且最初的那个操作a.xml文件的程序也出现问题
??
听不大懂;
尽可能的把你的东西;只像a.xml这样的xml按照原来的目录层次结构打包上来;
|
|
2007-5-24 08:40 |
|