找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21831|回复: 3

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

[复制链接]
发表于 2014-7-24 22:51:15 | 显示全部楼层 |阅读模式
不用xcopy如何将目录下的文件及文件夹复制到别处?
用copy怎么实现呢?
还有其它方法实现吗?
求示例~
发表于 2014-7-24 23:08:11 | 显示全部楼层
试试 robocopy
发表于 2014-7-25 00:52:01 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2014-7-25 12:08:46 | 显示全部楼层
回复 3# CrLf


     (●′▽`●) (゜∀゜ノノ゛☆ 必需点个赞啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 09:44 , Processed in 0.029746 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表