使用批处理文件将文件夹的所有内容复制到另一个文件夹?


130

我有一个文件夹 C:\Folder1

我想将的所有内容复制Folder1到另一个位置,D:\Folder2

如何使用批处理文件执行此操作?

Answers:


163

xcopy.exe是这里的解决方案。它内置在Windows中。

xcopy /s c:\Folder1 d:\Folder2

您可以在http://www.computerhope.com/xcopyhlp.htm中找到更多选项


3
您好侯赛因,我已经尝试在批处理文件中使用xcopy / sc:\ Folder1 d:\ Folder2命令,但是它对我不起作用。你能指导我更多吗?
SCM

嗨,可能是您的计算机上没有该xcopy。.但是,您可以从此处下载批处理文件brothersoft.com/xcopy-177904.html
eHussain 2011年

4
如果还要复制空的子目录,则应使用/ s / e标志。
2013年

/ e不自动包含/ s吗?
mghicks,2015年

14
xcopy不推荐使用,当文件名超过254个字符时,会引发“内存不足”错误。使用robocopy来代替:robocopy C:\Folder1 D:\Folder2 /COPYALL /E en.wikipedia.org/wiki/Robocopy
马尔科Demaio

39

如果您拥有robocopy,

robocopy C:\Folder1 D:\Folder2 /COPYALL /E

除此以外,

xcopy /e /v C:\Folder1 D:\Folder2

1
如果那会复制Folder1的内容,如果要复制文件夹本身该怎么办?
凯尔·德莱尼

2
@KyleDelaney在目标中包含源文件夹名称,例如“ xcopy / e / v C:\ Folder1 D:\ Folder2 \ Folder1 \”
mghicks '17

1
需要注意的是ROBOCOPY使用\作为转义字符 (CMD没有),如果你尝试,并通过与空间的引用路径和结束斜线"C:\My Folder\"你可能会得到一个讨厌的惊喜。我建议您仔细阅读SS64页面。有关“什么是CMD中的转义字符”兔子洞的完整介绍,请参见在批处理脚本中转义双引号
jrh

21

如果要删除该消息,告诉它目的地是文件还是文件夹,则只需添加一个斜杠:

xcopy /s c:\Folder1 d:\Folder2\


16

我看到很多答案建议使用xcopy。但这是不必要的。正如该问题明确提到的那样,在这种情况下,作者希望文件夹中的内容而不是文件夹本身可以复制:

copy "C:\Folder1" *.*  "D:\Folder2"

多数民众赞成在所有 xcopy子目录可以使用的情况下C:\Folder1


1
如果要复制到的文件夹尚不存在(我相信),则此方法不起作用,因此您可能要添加md D:\Folder2
Mark Deven

2
我的copy命令(Windows 10命令提示符)告诉我语法不正确。以下是正确的语法:copy "C:\Folder1\*.*" "D:\Folder2"
j00hi

4

RoboCopy不适用于我,这里有一些好的解决方案,但是没有一个解释XCopy开关及其作用。另外,如果路径中有空格,则也需要使用引号。

xcopy / i / e“ C:\ temp \ folder 1”“ C:\ temp \ folder 2”

这是Microsoft的文档:

XCopy MS文档

/s: Specifies to include subdirectories. Excludes empty subdirectories
/e: Copies all subdirectories, even if they are empty
/i: specifies the destination is a folder (Otherwise it prompts you)


2

在我的PC上,xcopy和robocopy也需要它们的路径,即C:\ Windows \ System32 \ xcopy.exe

这就是为什么我只使用“复制”的原因:复制/ y .... \ Folder1 \ File.txt .... \ Folder2 \


2
@echo off
xcopy /s C:\yourfile C:\anotherfile\

这是完成的!简单吧?


-1

仅供参考...如果您使用TortoiseSVN,并且想要创建一个简单的批处理文件以定期将整个存储库xcopy(或目录镜像)复制到“安全”位置,那么这就是您可能要使用的特定代码。它复制隐藏的目录/文件,维护只读属性,所有子目录(最好是所有子目录)不会提示输入。只要确保您正确分配了folder1(安全存储库)和folder2(可用存储库)即可。

@echo off
echo "Setting variables..."
set folder1="Z:\Path\To\Backup\Repo\Directory"
set folder2="\\Path\To\Usable\Repo\Directory"
echo "Removing sandbox version..."
IF EXIST %folder1% (
    rmdir %folder1% /s /q
)
echo "Copying official repository into backup location..."
xcopy /e /i /v /h /k %folder2% %folder1%

而且,就是这样!

添加到计划的任务中,永不回头。


-2
@echo off
:: variables
echo Backing up file
set /P source=Enter source folder:
set /P destination=Enter Destination folder:
set xcopy=xcopy /S/E/V/Q/F/H/I/N
%xcopy% %source% %destination%
echo files will be copy press enter to proceed
pause

2
对您的代码进行解释不仅将使提出该问题的人受益,还将使那些偶然发现此问题以寻找相同问题的解决方案的未来人们受益。
Josh Burgess 2014年

3
您有几个与其他标志直接矛盾的标志。/S复制目录和子目录(空目录除外),同时/E复制目录和子目录(包括空目录)。/Q在复制时不显示文件名,而在复制时/F显示完整的源文件名和目标文件名。
SomethingDark 2014年

-2

我已经写了一个.bat文件,将文件复制并粘贴到一个临时文件夹中,并使其压缩并传输到smb挂载点,希望这会有所帮助,

    @echo off
    if not exist "C:\Temp Backup\" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
    if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"
    if not exist "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs" mkdir "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    xcopy /s/e/q "C:\Source" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
   Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\TELIUM"
    "C:\Program Files (x86)\WinRAR\WinRAR.exe" a  "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP\ZIP_Backup_Log_%date:~-4,4%_%date:~-10,2%_%date:~-7,2%.rar" "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\Logs"
    NET USE \\IP\IPC$ /u:IP\username password
    ROBOCOPY "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%\ZIP"  "\\IP\Backup Folder" /z /MIR /unilog+:"C:\backup_log_%date:~-4,4%%date:~-10,2%%date:~-7,2%.log"
    NET USE \\172.20.10.103\IPC$ /D
    RMDIR /S /Q "C:\Temp Backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%"
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.