【发布时间】:2011-06-03 19:45:29
【问题描述】:
我在C:\Folder1中有一个文件夹
我想将Folder1的所有内容复制到另一个位置,D:\Folder2
如何使用批处理文件执行此操作?
【问题讨论】:
标签: windows batch-file copy directory
我在C:\Folder1中有一个文件夹
我想将Folder1的所有内容复制到另一个位置,D:\Folder2
如何使用批处理文件执行此操作?
【问题讨论】:
标签: windows batch-file copy directory
这是一个使用 robocopy 的解决方案,它将 Folder1 的内容复制到 Folder2 并通过所有子目录并自动覆盖具有相同名称的文件:
robocopy C:\Folder1 C:\Folder2 /COPYALL /E /IS /IT
这里:
/COPYALL 复制所有文件信息/E 复制子目录,包括空目录/IS 包括相同的文件/IT 包括修改后的同名文件
更多参数见官方文档:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
注意:由于参数/COPYALL,可能需要以管理员身份运行命令。如果你不能:就摆脱它。
【讨论】:
我已经编写了一个 .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%"
【讨论】:
RoboCopy 对我不起作用,这里有一些很好的解决方案,但没有人解释 XCopy 开关及其作用。如果您的路径中有空格,您还需要引号。
xcopy /i /e "C:\temp\folder 1" "C:\temp\folder 2"
这是来自 Microsoft 的文档:
/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)
【讨论】:
@echo off
xcopy /s C:\yourfile C:\anotherfile\
这就是它的完成方式! 很简单吧?
【讨论】:
我看到很多建议使用 xcopy 的答案。 但这是不必要的。正如问题清楚地提到,在这种情况下,作者希望文件夹中的内容而不是文件夹本身被复制,我们可以 - :
copy "C:\Folder1" *.* "D:\Folder2"
仅此而已如果C:\Folder1中存在任何子目录,则可以使用xcopy
【讨论】:
md D:\Folder2
copy 命令(Windows 10 命令提示符)告诉我语法不正确。以下是正确的语法:copy "C:\Folder1\*.*" "D:\Folder2"
在我的电脑上,xcopy 和 robocopy 还需要它们的路径,即 C:\Windows\System32\xcopy.exe
这就是我简单地使用“复制”的原因: 复制 /y ....\Folder1\File.txt ....\Folder2\
【讨论】:
如果你想删除告诉目标是文件还是文件夹的消息,你只需添加一个斜杠:
xcopy /s c:\Folder1 d:\Folder2\
【讨论】:
xcopy /s C: D:
仅供参考...如果您使用 TortoiseSVN 并且想要创建一个简单的批处理文件以定期将整个存储库 xcopy(或目录镜像)到“安全”位置,那么这就是您可能想要的特定代码使用。它复制隐藏的目录/文件,维护只读属性,所有子目录,最重要的是,不提示输入。只需确保正确分配文件夹 1(安全仓库)和文件夹 2(可用仓库)即可。
@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%
伙计们,就是这样!
添加到您的计划任务中,永不回头。
【讨论】:
xcopy.exe 是这里的解决方案。它内置在 Windows 中。
xcopy /s c:\Folder1 d:\Folder2
您可以在http://www.computerhope.com/xcopyhlp.htm找到更多选项
【讨论】:
xcopy 已弃用,并在文件名超过 254 个字符时触发“内存不足”错误。改用robocopy:robocopy C:\Folder1 D:\Folder2 /COPYALL /Een.wikipedia.org/wiki/Robocopy
@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
【讨论】:
/S 复制目录和子目录,但空目录除外,/E 复制目录和子目录,包括空目录。 /Q 在复制时不显示文件名,而/F 在复制时显示完整的源文件名和目标文件名。
@echo off
::Ask
echo Your Source Path:
set INPUT1=
set /P INPUT1=Type input: %=%
echo Your Destination Path:
set INPUT2=
set /P INPUT2=Type input: %=%
xcopy %INPUT1% %INPUT2% /y /s
【讨论】:
如果你有 robocopy,
robocopy C:\Folder1 D:\Folder2 /COPYALL /E
否则,
xcopy /e /v C:\Folder1 D:\Folder2
【讨论】:
"C:\My Folder\")的带引号的路径,您可能会得到一个令人讨厌的惊喜.我建议非常仔细地阅读 SS64 页面。有关“什么是 CMD 中的转义字符”兔子洞的完整旅程,请参阅Escaping Double Quotes in Batch Script。