中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样复制文件,并将该文件的目录结构一起复制
作者:
标题: 怎样复制文件,并将该文件的目录结构一起复制 上一主题 | 下一主题
kole
初级用户





积分 30
发帖 12
注册 2007-11-30
状态 离线
『楼 主』:  怎样复制文件,并将该文件的目录结构一起复制

我现在要处理一些文件,文件在硬盘上是这样存放的,比如
d:\国语\港台男星\刘德华\中国人.mpg
d:\国语\港台男星\刘德华\忘情水@50.mpg
d:\l国语\港台男星\刘德华\天意@30.mpg
d:\国语\港台男星\张学友\吻别.#.mpg
d:\l国语\港台男星\张学友\一千个伤心的理由.#.mpg

都是这样存放的,硬盘中有好多,歌曲名都是存放在以歌星命名的目录中
而我现在要选出部分我想要的文件,我现在怎样将原始盘中“刘德华”“忘情水”或“刘德华”“中国人”的文件连同它的目录结构一起复制到f:\,要求复制后的目录结构一样,用什么批处理命令实现呀。一开始我想过用遍历整个磁盘中含有“中国人”的拷出来,但还有一个问题就是,硬盘中也会有“中国人民解放军进行曲”,这样不知道怎么处理了。要根据歌星名关联了。现在请大家帮忙一下了,我实在没办法了。非常感谢。

[ Last edited by kole on 2008-2-3 at 10:44 PM ]

2008-2-3 22:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 2 楼』:  

用XCOPY /S/E即可

例:XCOPY C:\刘 F:\ /S/E

[ Last edited by fzp1978321 on 2008-2-3 at 10:41 PM ]

2008-2-3 22:40
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
kole
初级用户





积分 30
发帖 12
注册 2007-11-30
状态 离线
『第 3 楼』:  

我是要选其中的一些文件,不是整个目录拷的

2008-2-3 22:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kole
初级用户





积分 30
发帖 12
注册 2007-11-30
状态 离线
『第 4 楼』:  

for /r D:\ %%a in (*中国人*.*) do xcopy  "%%a"  f:\
这个命令行不行呀,这样就是不能指定是刘德华的“中国人”,还有怎样复制目录结构呀

2008-2-3 22:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kole
初级用户





积分 30
发帖 12
注册 2007-11-30
状态 离线
『第 5 楼』:  

在线等。。。。高手请进

2008-2-3 22:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by kole at 2008-2-3 22:50:
for /r D:\ %%a in (*中国人*.*) do xcopy  "%%a"  f:\
这个命令行不行呀,这样就是不能指定是刘德华的“中国人”,还有怎样复制目录结构呀

命令行把2个%%a换成%a,这个是练DOS、CMD的基本功



第一高手    第二高手

2008-2-4 00:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 7 楼』:  


@echo off
    pushd d:\
    set /p File=输入歌曲名:
    set /p Name=输入歌星名:
    for /f "delims=" %%i in ('dir /a /b /s "%File%*"') do call :Sub "%%i"
    popd
    pause
goto :eof

:Sub
rem 判断歌星
    pushd "%~dp1"
    set "CurDir=%cd%"
    for %%i in ("%CurDir%") do set "CurDir=%%~ni"
    popd
    if not "%CurDir%" == "%Name%"  goto :quit
   
rem 拷贝
    set "NewPath=f:%~p1"
    md "%NewPath%"
    copy "%~1" "%NewPath%"
    if not %errorlevel%==0 echo %~1 拷贝失败!
   
    :quit
        set NewPath=
        set CurDir=
goto :eof
代码未测试,请酌情自行修改.
如果代码执行正确不妨建立一文本文件,然后用for去读取它的内容来替换set /p,毕竟在命令提示符下输入中文还是比较麻烦的。

2008-2-4 00:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kole
初级用户





积分 30
发帖 12
注册 2007-11-30
状态 离线
『第 8 楼』:  

非常感谢版主大哥,如果我生成一个文本文件,存放set /p后的歌星名,歌曲名,TXT文件中存的放格式为:歌星名|歌曲名  ,那请问这代码应该怎样来改一下。谢谢

2008-2-6 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by kole at 2008-2-6 21:04:
非常感谢版主大哥,如果我生成一个文本文件,存放set /p后的歌星名,歌曲名,TXT文件中存的放格式为:歌星名|歌曲名  ,那请问这代码应该怎样来改一下。谢谢

参考for /f的用法。
本版相关的讨论太多了。

2008-2-8 12:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lovelymorning
初级用户





积分 131
发帖 72
注册 2008-2-24
状态 离线
『第 10 楼』:  

如果你的存放格式是   歌星名|歌曲名
那就用

for /f "delims=| tokens=1" %%a in (name.txt) do set file=%%a
for /f "delims=| tokens=2" %%b in (name.txt) do set name=%%b

这两句替换  
set /p File=输入歌曲名:
set /p Name=输入歌星名:
这两个就行了

或是就直接  歌名与 歌曲名 之间以一空格为界限就行了,省得在for里再打 delims

2008-2-24 22:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: