中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-25 08:34
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 前些天看到一个关于文本内容的帖子(bat)
可打印版本  946 / 11
第1楼 lililulula 发表于 2007-05-25 12:25
中级用户 发帖 138 积分 302
前些天看到一个关于文本内容的帖子(bat)
前些天看到一个问题
下面是一个xml文档的内容的部分,难题是,如何根据其内容,然后从电脑中复制所有的Filename文件,并保存到每个文件所对应的ServerFolder路径中?
<UpdateFiles
UpdateDate="21052007 0215">
<FileDescription
ComponentID="AVS"
UpdateType="desc"
ServerFolder="../../bases/av/avc/i386"
Filename="av-i386-0607g.xml"
FileDate="21052007 0057" />
<FileDescription
ComponentID="AS"
UpdateType="desc"
ServerFolder="../../bases/as/kis"
Filename="as-0607g.xml"
FileDate="21052007 0202" />
<FileDescription
ComponentID="AHI386"
UpdateType="desc"
ServerFolder="../../bases/ids/i386"
Filename="ah-i386-0607g.xml"
FileDate="18052007 1408" />
<FileDescription
ComponentID="AHX64"
UpdateType="desc"
ServerFolder="../../bases/ids/x64"
Filename="ah-x64-0607g.xml"
FileDate="18052007 1418" />
<FileDescription
ComponentID="AH"
UpdateType="desc"
ServerFolder="../../bases/ids/i386-x64"
Filename="ah-i386-x64-0607g.xml"
FileDate="18052007 1427" />

很难的一个题目。。希望高手能帮忙解决。。先谢过了!

说明一下。保存路径可以只是后面有显示的部分。如bases/av/avc/i386

当时有思路,但是这几天一下子忙忘了,今天又想起来,写了下测试成功,也算自己做个练习,代码如下,XP 下测试成功,达到提问者的要求.
不过有一点疑问就是我取了ServerFolder 和Filename的记录后,前面会有很多空格,所以我用!filefolder:~30,-1!取目录名,!filename:~26,-1!取文件名,个人猜想如果操作系统变化的话,可能取的位数也会发生变化,至于空格产生原因期待高人解释.


[ Last edited by lililulula on 2007-5-25 at 12:48 PM ]
第2楼 wudixin96 发表于 2007-05-25 14:04
银牌会员 发帖 931 积分 1,928
这个应该用JS处理起来。效果会好些。
第3楼 bjsh 发表于 2007-05-25 17:00
银牌会员 发帖 621 积分 2,000
我来把那天的整个问题陈述一下吧;
他那天描述的很不清楚:
后来私下找我;我了解到的;


附件里的有两个文件一个是 涉及到的资源文件 1文件夹; 一个是 目标文件夹 AVP;

最开始时AVP内只有这样一个目录结构 avp\index\6\a.xml

他的意思是根据a.xml里涉及到的"filename="所涉及到的文件全部复制到所对应的"serverfolder"文件夹里;
这些serverfolder的根目录就是avp; 其中有写filename没有对应的serverfolder就复制到当前被操作的xml同一目录下;

a.xml操作完后 在avp下产生两个文件夹; 然后对avp内所有的xml除了a.xml 都进行上述相同的操作;


实际写的时候遇到的问题是: xml的书写并不一致,有写serverfolder在filename前面有写 在后面;

尤其是除了a.xml外其他的xml更是涉及到了大量的 只有filename没有serverfolder的问题;

我把我的代码贴出来

附件
1.rar (53.22 KiB)
第4楼 nbic 发表于 2007-05-25 17:18
初级用户 发帖 61 积分 135
这个问题。在bjsh版主的帮助下。已经得到解决。。
由于权限不够。。只能加最多的分。。

不过这个问题的解决,帮了我一个很大的忙,非常感谢!

[ Last edited by nbic on 2007-5-25 at 06:02 PM ]
第5楼 lililulula 发表于 2007-05-25 17:51
中级用户 发帖 138 积分 302
恩,如果按bjsh版主所说的serverfolder和filename xml里顺序不同的话,我这个批无法实现,还有就是如果没列出serverfolder的话,复制到当前avp目录这个我由于不知道原因所以批也无能为力了,bjsh斑竹热心人,谢谢提醒
第6楼 nbic 发表于 2007-05-26 10:45
初级用户 发帖 61 积分 135
现在有个问题。。就是如何将
:start
set "serverfolder=%serverfolder:/=\%"
md c:\AVP\%serverfolder%
copy c:\1\%filename% c:\AVP\%serverfolder%
中的copy的过程屏蔽掉。让它不在cmd界面中显示。。
我试着copy c:\1\%filename% c:\AVP\%serverfolder% >nul 2>nul,不能屏蔽。。
第7楼 bjsh 发表于 2007-05-26 12:24
银牌会员 发帖 621 积分 2,000
可以屏蔽啊
c:\>copy 9999.txt 89
已复制 1 个文件。

c:\>echo y|del 89\*.*
c:\89\*.*, 是否确认(Y/N)? y

c:\>copy 9999.txt 89 >nul 2>nul

c:\>
第8楼 nbic 发表于 2007-05-26 13:06
初级用户 发帖 61 积分 135
那么在执行上面3楼的整个程序时,cmd屏幕会显示:复制了一个文件
等的信息。这个问题出在哪呢?
第9楼 bjsh 发表于 2007-05-26 14:07
银牌会员 发帖 621 积分 2,000
把所有涉及到 copy 和move 的地方都加上 >nul 2>nul

不仅仅只有:start里面有复制;

好好看看代码
第10楼 nbic 发表于 2007-05-26 16:22
初级用户 发帖 61 积分 135
还是不行。。
move c:\AVP\index\6\a.xml c:\
if "!count!"=="1" if /i "!var:~-8!"=="filename" copy c:\1\!filename! %%~dpl & set "count="
if defined filename copy c:\1\!filename! %%~dpl
move c:\a.xml c:\AVP\index\6\
copy c:\1\xml-0607g.pbv c:\avp\index\6\
copy c:\1\kl-0607g.pbv c:\avp\index\6\
copy c:\1\%filename% c:\AVP\%serverfolder%
这些后面都加了>nul 2>nul还是会显示哦。。
第11楼 nbic 发表于 2007-05-26 18:00
初级用户 发帖 61 积分 135
Originally posted by bjsh at 2007-5-26 12:24 PM:
可以屏蔽啊
c:\>copy 9999.txt 89
已复制 1 个文件。

c:\>echo y|del 89\*.*
c:\89\*.*, 是否确认(Y/N)? y

c:\>copy 9999.txt 89 >nul 2>nul

c:\>

我想要的是。将“已复制 1 个文件。”这种文字信息屏蔽掉。。
不过试了很多。都不能达到效果哦。。
第12楼 bjsh 发表于 2007-05-26 20:39
银牌会员 发帖 621 积分 2,000
if "!count!"=="1" if /i "!var:~-8!"=="filename" copy c:\1\!filename! %%~dpl & set "count="


这句不是把 >nul 2>nul 直接加在后面 而是加在

if "!count!"=="1" if /i "!var:~-8!"=="filename" copy c:\1\!filename! %%~dpl >null 2>nul& set "count="
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023