命令行命令将整个目录(包括目录文件夹)复制到另一个目录


68

使用命令行,我想将一个目录复制到另一个目录。例如,目录C:/testC:/test2

我想复制C:/test到,C:/test2以便将结果C:/test2/test

到目前为止,我发现的所有内容都只会将其中包含的文件和文件夹复制C:/test到中C:/test2,而忽略了父目录。


1
尝试使用xcopy

Answers:


50

尝试XCOPY/E开关一起使用。更多信息在这里

多年以来,我不必从大脑中访问这些信息!

更新

该文件说,它会将源目录中的所有文件和子目录(意味着不会创建父目录),所以你必须创建testC:\test2第一和再使用XCOPY


2
Xcopy上的'/ T'开关将执行目录和子目录结构的复制,不包含任何文件。
mfg 2010年

2
最好robocopy /CREATE /COPYALL /DCOPY:T src dst仅复制文件夹和空文件,但保留所有时间戳和其他属性。
user1016274

2
实际上,这还不能为问题提供答案,因为test仍需要创建文件夹。
IGRACH '16

3
我以为@IGRACH我认为md test然后使用就很xcopy明显了。
vivin

1
好问题是关于copy文件夹不创建新文件夹,然后在其中复制内容。
IGRACH '16

35
xcopy c:\test c:\test2\test /s /e /h

这里是关于XCOPY信息[ 12 ]


2
如何停止要求我输入“ D”?
YumYumYum '16

2
@YumYumYum:可以使用/ I开关:“ / I如果目标不存在并且要复制多个文件,则假定目标必须是目录。”
Thijs Tijsma'1

18

如果要创建备份脚本,请使用ROBOCOPY。xcopy已被弃用,并可能在不久的将来被淘汰。robocopy可以做xcopy可以做的一切。它也更加灵活和可靠。使用robocopy创建脚本将使它们过时。


  1. 使用robocopy轻松复制文件夹。robocopy命令替换了xcopy命令。它可以快速复制整个文件夹,而不必担心定义内容。例如,要将C:\ tools目录的所有内容复制到新文件夹D:\ backup \ tools,请输入以下内容:

    robocopy C:\tools D:\backup\tools /e
    

    / e修饰符告诉robocopy包含所有子目录。这包括空文件夹。robocopy将自动复制隐藏文件和系统文件。如果目标位置不存在新目录,它将创建新目录。

  2. 镜像目录。镜像目录非常适合进行备份。robocopy的mirror选项会将所有内容从源复制到目标。然后它将删除源中不存在的任何目标。这样可以确保您的备份仅包含文件的最新版本。例如,要将C:\ Users \ My Documents镜像到D:\ backup \ My Documents,请输入以下内容:[4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    此功能将保留原始文件的所有权限。

  3. 启用重新启动。您可能希望包括在复制过程中断开连接的情况下重新启动进程的功能。

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. 记录复制过程。robocopy允许您创建一个日志文件。这可以帮助您查明问题或生成复制内容的存档。

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    / log +修饰符将附加现有的日志文件,而不是覆盖它。如果您只想覆盖旧的日志文件,请使用/log:.txt。


8

我推荐在xcopy之上使用robocopy,因为它有更多选择,包括保持时间戳不变,我认为这很重要。

Robocopy需要在XP / 2003上添加,但是从Vista开始是标准的。

我实际上通常使用xxcopy,但是64位版本不是免费的。


1
robocopy是Windows程序。问题是关于DOS。
grawity 2010年

9
@grawity:与在现实世界中常见的将他称为CMD“ DOS”的高可能性相比,他实际使用16位DOS的可能性很小。
paradroid

真正的问题是:robocopy是Microsoft程序吗?
knocte

@knocte是的
yossico


3

如果最初的问题是我一直在寻找的答案,那么我(显然没有一个人)已经提出了明确的解决方案。

我正在寻找的是将测试目录复制到test2目录,而无需再次输入。就像是

xcopy /isvy c:\test d:\test2

d:\test2\test复制之前的位置不存在,但复制之后的位置。这样可以节省第二次在目标路径中进行的错误键入测试。上面的命令会将所有文件和任何目录复制到test2中,但不会创建测试目录。

至今

xcopy /isvy c:\test d:\test2\test

这确实是我发现完成这项工作的唯一方法。同样,如果您遇到输入问题,则不能保证源目录和目标目录将匹配。

解决此问题的另一种方法是

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

这将在mydir变量中设置目标目录,然后在源路径和目标路径中都使用该变量。如果您输入错误的变量,您将得到一个错误,或者目标目录可能%在开头和结尾。

输入的时间更长,但获得错误名称的机会更少。他们将是值得注意的。


实际上xcopy /ievy c:\test d:\test2\test,它保持目录树的结构,并且set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%仅以1 就足够了,因为设置值的结果总是成功的。
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

SWITCHES可以在哪里:

  • 复制整个目录结构:

    /hiev

  • 要覆盖目标文件(如果目标文件夹已存在):

    /hievry

  • 要覆盖并使用ACL + Attribute复制,请执行以下操作:

    /hievxok

最适合您的情况:

xcopy /hievry C:\test C:\test2\test


0

我遇到过类似的情况,我需要将许多文件夹(包括文件夹名称)复制到目标位置,希望此标记为已回答的问题会有所帮助,但实际上没有帮助。

首先,在某些情况下肯定有人需要此功能,当我不得不从C:\ Windows \ Assembly \ GAC_MSIL复制文件夹时,我遇到了这种情况。Windows资源管理器拒绝显示此文件夹,因此您必须使用命令提示符。

如果您熟悉GAC文件夹,您会知道文件夹名称很简单,如果您键入错误,很容易出错。

因此,事先创建目录实际上不是一个选择-除非您使用脚本-我最终使用了它,因为这是唯一的实际解决方案。

首先将要复制的文件夹转储到临时文件,这通常基于某种模式,例如

dir /B policy* > Folders.txt

然后循环转储中的条目并复制到目标。如果目标参数以反斜杠(\)结尾,则Xcopy将负责创建文件夹。

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

将这两个命令放入批处理文件中并运行。

现在,如果仅内置了xcopy或robocopy。



0

对于您的问题,我已经找到了一个功能性的替代答案。

首先,使用FORFILESwith /S参数,可以访问其中的每个子目录C:\test

其次,通过/C参数,可以启动带有本机变量的命令链,从而可以在目标位置创建相同的目录,然后使用两个条件结构将文件复制到其中。

第一个条件结构@isdir==TRUE(确保使用大写字母)允许只从源获取目录,然后在目的地MKDIR [path]\@relpath末尾创建目录。

最后,第二个命令确保仅使用来处理文件@isdir==FALSE,然后COPY命令仅完成工作,通过FORFILES命令将所有文件设置[path]@relpath为目标,以将文件复制到刚创建的目录中。

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

希望能对这里的所有人有所帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.