批处理文件以将文件从一个文件夹复制到另一个文件夹


235

我在网络上有一个存储文件夹,所有用户都可以在其中将活动数据存储在服务器上。现在由于位置问题,该服务器将被新服务器替换,因此我需要将子文件夹文件从旧服务器存储文件夹复制到新服务器存储文件夹。我有以下ex:

从\ Oldeserver \ storage \ data和文件到\ New server \ storage \ data和文件。


3
我假设您正在谈论Windows环境?
艾伦·梅


4
@ HugoM.Zuleta,我知道.bat文件。但是“批处理文件”并不一定能保证Windows环境。该术语的使用早于Windows(与.bat文件一样),我什至还看到新手在* nix环境中使用该术语来表示“ shell脚本”。
艾伦·梅

1
@pluma我同意,这主要是因为它们指的是由操作系统的脚本工具完成的批处理操作。
Hugo M. Zuleta

Answers:


441

xcopy.exe绝对是您的朋友。它内置于Windows中,因此成本不高。

只是 xcopy /s c:\source d:\target

您可能需要调整一些内容;我们还添加的一些选项包括:

  • /s/e -递归复制,包括复制空目录。
  • /v-添加此内容以对照原件验证副本。慢一点,但是偏执。
  • /h -复制系统和隐藏文件。
  • /k-复制只读属性以及文件。否则,所有文件将变为可读写。
  • /x-如果您关心权限,则可能需要/o/x
  • /y -在覆盖现有文件之前不要提示。
  • /z-如果您认为副本可能会失败并且想要重新启动它,请使用它。它在复制每个文件时在每个文件上放置一个标记,因此您可以重新运行xcopy命令以从上次中断的地方开始提取。

如果您认为xcopy可能会中途失败(例如,通过不稳定的网络连接进行复制时),或者您必须停止它并希望以后再继续,则可以使用xcopy /s/z c:\source d:\target

希望这可以帮助。


2
@Iavinio复制档案时询问文件或目录。有没有办法抑制这种情况?
Bitterblue

@ mini-me,您好-我发现如果它是目录,则可以指定结尾的'/'字符,并且看不到该消息。
DaveDev

2
/i-如果目标不存在并且复制多个文件,则假定目标必须是目录。
lavinio

1
如何从目录复制单个文件?
Charan Raju CR

10
要绕过“文件或目录”提示,请像这样执行命令... echo f | xcopy /s /f srcfile destfile
wintondeshong 2014年

56

我最喜欢的备份数据是:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir用于镜像。您也可以使用/ mov来移动文件。它复制完全相同的文件夹。它可以根据需要删除/覆盖文件。对我来说很棒。它比xcopy / copy快。它也内置在Windows中。

来源:http//technet.microsoft.com/en-us/library/cc733145.aspx


2
我支持这个。真的很快。比xcopy快得多
Ike

有没有办法像这样递归地删除thumbs.db?
drooh

54

请注意,使用时 xcopy /s c:\source d:\target,请将“”放在c:\ source和d:\ target周围,否则会出错。

即路径中是否有空格,即如果您有:

"C:\Some Folder\*.txt"

但如果您具有以下条件,则不需要:

C:\SomeFolder\*.txt

1
用引号引起来;)谢谢,我还使用/ Y替换了文件(如果存在的话):)示例:´´´xcopy / s“ c:\ source”“ d:\ target” / Y''`
Joel Carneiro

18

您可能想看看XCopyRoboCopy,它们是适用于Windows上几乎所有文件复制操作的非常全面的解决方案。


3
RoboCopy似乎比XCopy更好,因为xcopy要求做出文件或文件夹决定。而且我不能拒绝它。它必须能够全自动工作。
Bitterblue

@ mini-me我知道这已经很晚了,但是我找不到相同的相关开关。最后,我求助于它创建一个要复制的同名空白文件,然后将其覆盖。如果该文件已经存在,则无需再询问它是文件还是目录。(如果要自动目录,则可以在路径后附加一个“ /”,它将执行此操作)。希望这对未来的人们有所帮助!
汤姆C

2
@Eve供参考,echo f | xcopy source destination /y将使其自动运行。它将所有问题分配为“ f”作为响应。它还将传递覆盖请求(我认为f被认为是)。
ndm13

14

要绕过“在目标上指定文件名或目录名(F =文件,D =目录)?” xcopy提示时,您可以执行以下操作...

echo f | xcopy /f /y srcfile destfile

或仅复制大型子结构/文件夹:

如果复制多个文件,请使用/ i来指定目标位置必须是目录


(对于文件,则为回声“ f”;对于目录
则为

尝试立即执行此操作,但并不能正常工作-尝试将一个文件复制到另一个目录时,总是收到提示。如果使用Win 10完全影响它,则使用echo 10。xcopy / f / y“ My.dll”“ C:\ myFolder \ My.dll”。我已经尝试过将其他开关组合使用,但都无济于事(和大写
教授

3

如果要复制的文件不使用绝对路径,则使用相对路径,换句话说:

别忘了在路径中写反斜线并且不要斜线

例如:

    copy children-folder\file.something .\other-children-folder

PS:可以使用称为“批处理参数”的通配符检索绝对路径

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

在此处查看有关副本的文档:https : //technet.microsoft.com/zh-cn/library/bb490886.aspx

以及此处的批处理参数文档:https : //www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


我认为\称为反斜杠。
Leon Bohmann

2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

0

看一下rsync基于Windows的工具NASBackup。如果您熟悉rsync命令,这将是一个好处。

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.