[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 不用xcopy如何将目录下的文件及文件夹复制到别处?

不用xcopy如何将目录下的文件及文件夹复制到别处?
用copy怎么实现呢?
还有其它方法实现吗?
求示例~

试试 robocopy

TOP

本帖最后由 CrLf 于 2014-7-25 15:15 编辑

写了一个 :xcopy 来模拟 xcopy 的主要功能,仅粗略实现了 /s /t /y /h 四个常用选项:
  1. @echo off
  2. call :xcopy /h
  3. rem 显示 usage
  4. call :xcopy /t "d:\tmp" e:\test\
  5. rem 将 d:\tmp 目录下的目录结构复制到 e:\test\ 路径下
  6. call :xcopy /s /y "d:\tmp" e:\test\
  7. rem 将 d:\tmp 目录下的所有文件和文件夹复制到 e:\test\ 路径下,不显示提示
  8. pause&exit
  9. :xcopy [/s] [/t] [/y] [/h] 源文件夹 目标文件夹
  10. setlocal disabledelayedexpansion
  11. set n=0
  12. for %%a in (源文件夹 目标文件夹 开关[/s] 开关[/y] 开关[/t] 开关[/h]) do set "%%a="
  13. rem 环境初始化
  14. for %%a in (%*) do (
  15. set "开关="
  16. if %%a gtr / if %%a lss : set 开关=true
  17. if defined 开关 (
  18. set 开关[%%a]=true
  19. ) else (
  20. if not defined 源文件夹 (
  21. set "源文件夹=%%~dpa"&set "源文件名=%%~nxa"
  22. if exist %%~a\nul (
  23. set "源文件夹=%%~a\"&set "源文件名=*"
  24. )
  25. ) else (
  26. set "目标文件夹=%%~fa"
  27. set "目标文件夹=%%~dpa"&set "目标文件名=%%~nxa"
  28. if exist %%~a\nul (
  29. set "目标文件夹=%%~fa\"&set "目标文件名="
  30. )
  31. )
  32. )
  33. )
  34. rem 解析开关和源文件夹、目标文件夹
  35. if defined 开关[/h] echo call :xcopy [/s] [/t] [/y] [/h] 源文件夹 目标文件夹&exit /b
  36. if defined 开关[/y] (set 开关[/y]=/y) else (set 开关[/y]=/-y)
  37. if defined 开关[/s] set 开关[/s]=/r /d
  38. if defined 开关[/t] set 开关[/s]=/r /d&set 开关[/t]=rem
  39. rem 为各开关设置宏
  40. if not defined 源文件夹 exit /b 1
  41. if not defined 源文件名 set "源文件名=*"
  42. if not defined 目标文件夹 set "目标文件夹=."
  43. if not exist %目标文件夹% md "%目标文件夹%"||exit /b 1
  44. rem 为未指定的 源文件夹 与 目标文件夹 变量做默认操作
  45. for /f "tokens=31 delims=\" %%a in (
  46. "%源文件夹%\30\29\28\27\26\25\24\23\22\21\20\19\18\17\16\15\14\13\12\11\10\9\8\7\6\5\4\3\2\1\0"
  47. ) do set 源文件夹深度=%%a
  48. rem 获取目标文件夹深度
  49. pushd "%源文件夹%"
  50. rem 切换路径
  51. (for %开关[/s]% %%a in (%源文件名%) do (
  52. for /f "tokens=%源文件夹深度%* delims=\" %%b in ("%%a") do (
  53. md "%目标文件夹%%%c" >nul
  54. %开关[/t]% copy %开关[/y]%  "%源文件夹%%%c\%源文件名%"  "%目标文件夹%%%c\%目标文件名%"
  55. )
  56. )) 2>nul
  57. rem 核心代码
  58. popd
  59. exit /b
复制代码

TOP

回复 3# CrLf


     (●′▽`●) (゜∀゜ノノ゛☆ 必需点个赞啊。

TOP

返回列表