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

我在网络上有一个存储文件夹,所有用户将在服务器上存储他们的活动数据。现在,由于位置问题,服务器将被一个新的服务器所取代,所以我需要将子文件夹文件从旧的服务器存储文件夹复制到新的服务器存储文件夹。我有以下例子:

\Oldeserver\storage\data & files\New server\storage\data & files

1451568 次浏览

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

查看基于rsync的Windows工具NASBackup。如果您熟悉rsync命令,这将是一个额外的奖励。

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

希望这能有所帮助。

只是为了清楚一点,当你使用xcopy /s c:\source d:\target时,在c:\source和d:\target周围加上"",否则你会得到错误。

如果路径中有空格,即:

"C:\Some Folder\*.txt"

但如果你有:

C:\SomeFolder\*.txt

我最喜欢的备份数据的方法是:

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

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

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

要绕过'在目标上指定文件名或目录名(F =文件,D =目录)?的提示符,你可以做以下事情…

echo f | xcopy /f /y srcfile destfile

或者对于我们这些只是复制大型子结构/文件夹的人来说:

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

如果你不想用绝对路径复制文件,换句话说,相对路径:

不要忘记在路径中加上反斜杠而不是斜杠

例子:

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"

在这里查看关于copy: https://technet.microsoft.com/en-us/library/bb490886.aspx的文档

这里还有批参数文档: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true < / p >

@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.

你可以使用esentutl复制(主要是大文件)的进度条:

esentutl /y "my.file" /d "another.file" /o

进度条看起来是这样的:

enter image description here

如果Bash对你可用,你可以简单地使用下面带有递归选项的命令。

cp -r "C:\Users\sourceFolder\." "C:\Users\destinationFolder"

这将复制所有文件和文件夹包含在sourceFolderdestincationFolder