中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] »
作者:
标题: 问一个有关文本内容的难题 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: