楼 主
怎样复制文件,并将该文件的目录结构一起复制
发表于 2008-02-03 22:38 · 中国 上海 奉贤区 电信
初级用户
★
积分 30
发帖 12
注册 2007-11-30 01:09
18年会员
UID 104212
性别 男
状态 离线
我现在要处理一些文件,文件在硬盘上是这样存放的,比如
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 ]
第 2 楼
发表于 2008-02-03 22:40 · 中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
用XCOPY /S/E即可
例:XCOPY C:\刘 F:\ /S/E
[ Last edited by fzp1978321 on 2008-2-3 at 10:41 PM ]
第 3 楼
发表于 2008-02-03 22:46 · 中国 上海 奉贤区 电信
初级用户
★
积分 30
发帖 12
注册 2007-11-30 01:09
18年会员
UID 104212
性别 男
状态 离线
第 4 楼
发表于 2008-02-03 22:50 · 中国 上海 奉贤区 电信
初级用户
★
积分 30
发帖 12
注册 2007-11-30 01:09
18年会员
UID 104212
性别 男
状态 离线
for /r D:\ %%a in (*中国人*.*) do xcopy "%%a" f:\
这个命令行不行呀,这样就是不能指定是刘德华的“中国人”,还有怎样复制目录结构呀
第 5 楼
发表于 2008-02-03 22:51 · 中国 上海 奉贤区 电信
初级用户
★
积分 30
发帖 12
注册 2007-11-30 01:09
18年会员
UID 104212
性别 男
状态 离线
第 6 楼
发表于 2008-02-04 00:11 · 中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by kole at 2008-2-3 22:50:
for /r D:\ %%a in (*中国人*.*) do xcopy "%%a" f:\
这个命令行不行呀,这样就是不能指定是刘德华的“中国人”,还有怎样复制目录结构呀
命令行把2个%%a换成%a,这个是练DOS、CMD的基本功
第 7 楼
发表于 2008-02-04 00:37 · 中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
@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,毕竟在命令提示符下输入中文还是比较麻烦的。
第 8 楼
发表于 2008-02-06 21:04 · 中国 上海 奉贤区 电信
初级用户
★
积分 30
发帖 12
注册 2007-11-30 01:09
18年会员
UID 104212
性别 男
状态 离线
非常感谢版主大哥,如果我生成一个文本文件,存放set /p后的歌星名,歌曲名,TXT文件中存的放格式为:歌星名|歌曲名 ,那请问这代码应该怎样来改一下。谢谢
第 9 楼
发表于 2008-02-08 12:19 · 印度 马哈拉施特拉邦 孟买郊区县 腾讯云
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
Originally posted by kole at 2008-2-6 21:04:
非常感谢版主大哥,如果我生成一个文本文件,存放set /p后的歌星名,歌曲名,TXT文件中存的放格式为:歌星名|歌曲名 ,那请问这代码应该怎样来改一下。谢谢
参考for /f的用法。
本版相关的讨论太多了。
第 10 楼
发表于 2008-02-24 22:08 · 中国 广东 佛山 南海区 电信
初级用户
★★
积分 131
发帖 72
注册 2008-02-24 14:31
18年会员
UID 111317
性别 男
状态 离线
如果你的存放格式是 歌星名|歌曲名
那就用
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
论坛跳转: