中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何根据文 本 文 件的内容拷贝数据
« [1] [2] »
作者:
标题: [已结]如何根据文 本 文 件的内容拷贝数据 上一主题 | 下一主题
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『楼 主』:  [已结]如何根据文 本 文 件的内容拷贝数据

详细内容:
根据文本文件的路径及文件名拷贝文件到指定路径下,并在该路径下建立相同的路径.例如:文本文件 a.txt 内容如下:

e:\book\abc\sample1.pdf
e:\book\abc\sample2.pdf
e:\book\abc\sample3.pdf

想拷贝sample1.pdf、sample2.pdf、sample3.pdf 到 f盘 ,并在f盘得到与e盘相同的目录结构:首先判断f盘中有没有book文件夹,如果没有则建一个book文件夹,然后再判断book有没有abc文件夹,如果没有则建一个abc文件夹,最后把三个文件拷贝到该文件夹中。
请教各位大侠,用批处理的方式能不能实现,多谢!

[ Last edited by lsjiang on 2008-11-13 at 17:14 ]

2008-11-7 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 2 楼』:  

请大侠们费费心,多谢了!

2008-11-8 00:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 3 楼』:  


@echo off
for /f "delims=" %%a in (a.txt) do (
  if not exist "F:%%~pa" md "F:%%~pa"
  copy /y "%%a" "F:%%~pa"
)


   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-8 11:13


2008-11-8 01:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 4 楼』:  

测试通过,完全实现所需功能!
非常感谢tireless!

2008-11-8 07:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 5 楼』:  

补充求助:
能不能在批处理中同时实现把文本文件a.txt中已拷贝的文件行删除?

2008-11-8 08:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by lsjiang at 2008-11-8 08:53 AM:
补充求助:
能不能在批处理中同时实现把文本文件a.txt中已拷贝的文件行删除?

也就是说 a.txt 列表中的有些文件是不存在的是吗?将不存在的路径保存到 b.txt:
@echo off
for /f "delims=" %%a in (a.txt) do (
  if not exist "F:%%~pa" md "F:%%~pa"
  copy /y "%%a" "F:%%~pa" >nul || >>b.txt echo %%a
)


2008-11-8 09:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 7 楼』:  

首先感谢tireless的不吝赐教!
补充中的意思也可以这样理解:把a.txt中已经拷贝完成的行删除!
是不是可以这样处理:把已经拷贝完成的文件夹及文件列出一个完整目录到另外一个文件文件b.txt中,然后比较a.txt和b.txt,从a.txt删除b.txt中有的行?(假设同一行中后面15个字符相同就视为此行相同)
我是新手,不知道用批处理能不能实现这样的功能?

[ Last edited by lsjiang on 2008-11-8 at 10:55 ]

2008-11-8 10:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  Re 7 楼

6 楼的代码不行么?

2008-11-8 11:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 9 楼』:  

6楼的代码基本能实现所需目标,再请教一个问题:如果目标盘F盘空间不足的话,6楼的代码能正常执行吗?

2008-11-8 11:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  Re 9 楼

不行的吧

2008-11-8 11:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 11 楼』:  

空间不足,拷贝不成功,会报错退出呢,还是能够继续执行“|| >>b.txt echo %%a”,把没有执行成功的部分输出到b.txt中呢?

2008-11-8 11:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by lsjiang at 2008-11-8 11:57 AM:
空间不足,拷贝不成功,会报错退出呢,还是能够继续执行“|| >>b.txt echo %%a”,把没有执行成功的部分输出到b.txt中呢?

应该是会把没有执行成功的部分输出到b.txt中。你自己测试吧,把一个盘的空间填满,然后... ...我的256MB内存的机器就不做测试了。

[ Last edited by tireless on 2008-11-8 at 13:34 ]

2008-11-8 13:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 13 楼』:  

已经过测试:会把没有执行成功的部分输出到b.txt中,只是会显示很多“磁盘空间不足”的提示,直到把所有没拷贝成功的行都显示一遍才会执行后面的命令。
请问:如果a.txt文件中行数很多的话,显示时间会较长,如何在第一个“磁盘空间不足”的提示后即停止拷贝,执行后面的输出命令?
麻烦了,再次表示感谢!

2008-11-8 14:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 14 楼』:  Re 13 楼


@echo off
for /f "delims=" %%a in (a.txt) do (
  if not exist "F:%%~pa" md "F:%%~pa"
  if not exist "%%a" (>>b.txt echo %%a) else copy /y "%%a" "F:%%~pa" >nul || pause & exit /b
)


2008-11-8 15:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lsjiang
新手上路





积分 17
发帖 16
注册 2008-11-7
状态 离线
『第 15 楼』:  

14楼的代码运行不成功,没有创建b.txt。可能是我没表达清楚。

6楼的代码已经基本能够达到目标,有个问题是在磁盘空间不足的情况下,一定要等到a.txt中所有行都执行完后才能进行输出动作,如果手动结束的话,后面的命令不执行就得不到b.txt。
我的意思是在在磁盘空间不足的情况下直接结束拷贝动作,并将没有成功拷贝的行输出到b.txt。

另外:if not exist "%%a" (>>b.txt echo %%a)  这句的意思没看明白,麻烦帮解释一下。谢谢

[ Last edited by lsjiang on 2008-11-8 at 16:29 ]

2008-11-8 16:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: