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

[文件操作] 批处理怎样复制目录及子目录下的所有文件到另一个目录下?

[复制链接]
发表于 2023-3-13 19:19:26 | 显示全部楼层 |阅读模式
复制一个目录及子目录下的所有文件到另一个目录下

例如 源目录  d:\123   下面有许许多多的子文件夹    子文件夹下  有许许多多的重名文件

我想要把123文件夹内的所有文件    提取到另外一个文件夹下,不保留原结构,重复文件只保留1个即可,全部文件都保留在根目录下
发表于 2023-3-13 20:34:23 | 显示全部楼层
本帖最后由 jyswjjgdwtdtj 于 2023-3-13 20:44 编辑

vbs可否?

不知道好不好用
  1. set fso=createobject("scripting.filesystemobject")
  2. set folderfrom=fso.getfolder(‪"C:\fromfolder")
  3. folderto="D:\tofolder"
  4. filetree folderfrom
  5. sub filetree(fdobject)
  6.         set files=fdobject.files
  7.         set folders=fdobject.subfolders
  8.         for each file in files
  9.                 if not fso.fileexists(folderto&""&file.name) then
  10.                         fso.copyfile(file.path,folderto&""&file.name,false)
  11.                 end if
  12.         next
  13.         for each folder in folders
  14.                 call filetree(folder)
  15.         next
  16. end sub
复制代码
没试
 楼主| 发表于 2023-3-13 20:39:01 | 显示全部楼层
回复 2# jyswjjgdwtdtj


    可以试试,文件夹内的文件比较多     几十万
 楼主| 发表于 2023-3-13 20:41:12 | 显示全部楼层
我在网络上搜索到一个  但是效率很低,速度很慢
set "source=d:\123"
set "dest=d:\456"
for /r "%source%" %%d in (*) do copy "%%d" "%dest%"
发表于 2023-3-13 20:46:24 | 显示全部楼层
回复 3# amio555


    那这么多干脆也别写脚本了
在windows文件管理器的文件夹右上角的搜索栏里输入个".",会把所有文件夹和文件列举出来,直接手动复制来的最快
写脚本纯属把简单问题复杂化
 楼主| 发表于 2023-3-13 20:55:16 | 显示全部楼层
回复 5# jyswjjgdwtdtj


    资源管理器会崩溃
发表于 2023-3-13 21:24:49 | 显示全部楼层
回复 6# amio555


    真的吗?十万个文件还不至于吧
那就开脚本吧
发表于 2023-3-13 21:34:29 | 显示全部楼层
  1. @echo off
  2. rem 设置源目录和目标目录
  3. set "so=d:\123"
  4. set "de="

  5. cd /d "%so%"
  6. for /r /d %%i in (*) do robocopy /mt:32 /xc /xo /xn "%%i" "%de%"
  7. pause
复制代码
发表于 2023-3-14 09:03:53 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-3-14 09:35 编辑

回复 4# amio555
速度快慢与多种因素有关,有时不一定是代码的问题,文件的多少、文件的大小(比如G级或T级)也会成为影响速度的因素,就看哪个是主导因素:
  1. @echo off
  2. cd /d "D:\123"
  3. copy /y "*" "D:\456"
  4. for /f "delims=" %%a in ('dir /s /b /ad') do copy /y "%%a\*" "D:\456"
  5. pause
复制代码
不要把批处理文件放在D:\123下,否则也会被复制到D:\456中。
 楼主| 发表于 2023-3-14 13:47:40 | 显示全部楼层
回复 9# qixiaobin0715


    可能文件夹文件太多,大概有40万个文件, 批处理一直在执行,可是目标目录一个文件没有被复制过来
发表于 2023-3-14 14:31:04 | 显示全部楼层
将批处理文件保存为ANSI编码试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 03:33 , Processed in 0.020050 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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