copying all contents of folder to another folder using batch file?
Asked Answered
T

13

172

I have a folder: C:\Folder1

I want to copy all the contents of Folder1 to another location, D:\Folder2

How do I do this using a batch file?

Teraterai answered 5/1, 2011 at 5:40 Comment(0)
B
200

xcopy.exe is the solution here. It's built into Windows.

xcopy /s c:\Folder1 d:\Folder2

You can find more options at http://www.computerhope.com/xcopyhlp.htm

Bumpy answered 5/1, 2011 at 5:45 Comment(8)
Hello Hussain, I have tried xcopy /s c:\Folder1 d:\Folder2 command in batch file, but it does't work for me. can you please guide me more.Teraterai
Hi, Might be you don't having that xcopy on your machine.. However you can download batch file from here brothersoft.com/xcopy-177904.htmlBumpy
If you want to copy also empty subdirectories you should use /s /e flags.Maintopmast
Doesn't /e automatically include /s?Medeah
xcopy is deprecated and fires an 'Insufficient memory' error when file name is longer than 254 characters. Use robocopy instead: robocopy C:\Folder1 D:\Folder2 /COPYALL /E en.wikipedia.org/wiki/RobocopyDecentralize
If that copies the contents of Folder1, what do you do if you want to copy the folder itself?Funnyman
relative path is also applicable ex ../some-folderBrochu
I just ran this (01/13/2020 on Windows 10) and it worked exactly as required on the original questions and my whole command was 295 characters long.Malamud
M
55

If you have robocopy,

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

otherwise,

xcopy /e /v C:\Folder1 D:\Folder2
Medeah answered 5/1, 2011 at 5:46 Comment(3)
If that copies the contents of Folder1, what do you do if you want to copy the folder itself?Funnyman
@KyleDelaney include the source folder name in the destination, e.g. "xcopy /e /v C:\Folder1 D:\Folder2\Folder1\"Medeah
Note that RoboCopy uses \ as an escape character (CMD does not), if you try and pass in a quoted path with a space and an ending slash like "C:\My Folder\" you may get a nasty surprise. I recommend reading that SS64 page very carefully. For a full trip down the "what is an escape character in CMD" rabbit hole, see Escaping Double Quotes in Batch Script.Ostyak
P
29

I see a lot of answers suggesting the use of xcopy. But this is unnecessary. As the question clearly mentions that the author wants the content in the folder not the folder itself to be copied in this case we can do

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

Thats all xcopy can be used for if any subdirectory exists in C:\Folder1

Phelan answered 11/2, 2017 at 7:18 Comment(2)
This does not work if the folder you are copying to does not yet exist (I believe) so you might want to add md D:\Folder2Mattland
My copy command (Windows 10 command prompt) tells me that the syntax is incorrect. The following would be the correct syntax: copy "C:\Folder1\*.*" "D:\Folder2"Tomas
S
26

if you want remove the message that tells if the destination is a file or folder you just add a slash:

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

Sarabia answered 13/11, 2015 at 10:53 Comment(2)
minor addition: in DOS, to copy from the root of one drive to another, the escape slashes should not be present. For example xcopy /s C: D:Corned
@Corned What are the escape slashes?Hellas
H
13

RoboCopy did not work for me, and there are some good solutions here, but none explained the XCopy switches and what they do. Also you need quotes in case your path has spaces in it.

xcopy /i /e "C:\temp\folder 1" "C:\temp\folder 2"

Here is the documentation from Microsoft:

XCopy MS Documentation

/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)
Hawsepipe answered 1/11, 2019 at 15:55 Comment(1)
xcopy ms doc might be the second most important information on this page :) , thanksNewfangled
C
4

Here's a solution with robocopy which copies the content of Folder1 into Folder2 going trough all subdirectories and automatically overwriting the files with the same name:

robocopy C:\Folder1 C:\Folder2 /COPYALL /E /IS /IT

Here:

/COPYALL copies all file information
/E copies subdirectories including empty directories
/IS includes the same files
/IT includes modified files with the same name

For more parameters see the official documentation: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

Note: it can be necessary to run the command as administrator, because of the argument /COPYALL. If you can't: just get rid of it.

Cocksure answered 7/8, 2020 at 7:8 Comment(0)
T
2
@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
Tenedos answered 8/9, 2014 at 12:16 Comment(0)
E
2

On my PC, xcopy and robocopy need also the path to them, i.e. C:\Windows\System32\xcopy.exe

That's why I use simply "copy": copy /y ....\Folder1\File.txt ....\Folder2\

Englishman answered 13/7, 2016 at 11:27 Comment(0)
I
2
@echo off
xcopy /s C:\yourfile C:\anotherfile\

This is how it is done! Simple, right?

Intrusion answered 11/2, 2017 at 11:21 Comment(0)
Y
0

Use the below command to copy

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

Flags: /E:- If you want to include an empty sub-folder

/S:- If you want to exclude an empty sub-folders

/XD:- If you want to exclude some sub-folder then use this flag and after that, you can mention the name of the sub-folder, which will not get copied.

/COPYALL:- Copies all file information For more information, you can visit Microsoft Robocopy Link

Yeung answered 13/2 at 7:10 Comment(0)
C
-1

FYI...if you use TortoiseSVN and you want to create a simple batch file to xcopy (or directory mirror) entire repositories into a "safe" location on a periodic basis, then this is the specific code that you might want to use. It copies over the hidden directories/files, maintains read-only attributes, and all subdirectories and best of all, doesn't prompt for input. Just make sure that you assign folder1 (safe repo) and folder2 (usable repo) correctly.

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

And, that's it folks!

Add to your scheduled tasks and never look back.

Compromise answered 28/10, 2015 at 11:42 Comment(0)
G
-2

I have written a .bat file to copy and paste file to a temporary folder and make it zip and transfer into a smb mount point, Hope this would help,

    @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%"
Garibull answered 27/12, 2019 at 8:21 Comment(0)
V
-3
@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
Vimen answered 19/11, 2014 at 14:35 Comment(2)
An explanation of your code will benefit not only the asker of this question but future people who stumble across this in search of a solution to the same problem.Germanium
You have several flags that directly contradict other flags. /S copies directories and subdirectories except for empty ones, while /E copied directories and subdirectories including empty ones. /Q does not display the files names while copying, while /F displays the full source and destination file names while copying.Scallop

© 2022 - 2024 — McMap. All rights reserved.