![]() |
中国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路径中? 当时有思路,但是这几天一下子忙忘了,今天又想起来,写了下测试成功,也算自己做个练习,代码如下,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: 我想要的是。将“已复制 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 |