копирование всего содержимого папки в другую папку с помощью командного файла?

130

У меня есть папка в C:\Folder1

Я хочу скопировать все содержимое Folder1в другое место,D:\Folder2

Как это сделать с помощью командного файла?

СКМ
источник

Ответы:

163

xcopy.exeэто решение здесь. Он встроен в Windows.

xcopy /s c:\Folder1 d:\Folder2

Вы можете найти больше вариантов на http://www.computerhope.com/xcopyhlp.htm

eHussain
источник
3
Привет, Хуссейн, я пробовал команду xcopy / sc: \ Folder1 d: \ Folder2 в пакетном файле, но у меня это не работает. не могли бы вы направить меня подробнее.
SCM
Привет, Возможно, у вас нет этого xcopy на вашем компьютере .. Однако вы можете загрузить командный файл отсюда brothersoft.com/xcopy-177904.html
eHussain
4
Если вы хотите скопировать также пустые подкаталоги, вы должны использовать флаги / s / e.
Ameba Spugnosa
Разве / e не включает / s автоматически?
mghicks
14
xcopyустарела и выдает ошибку "Недостаточно памяти", если имя файла превышает 254 символа. robocopyВместо этого используйте : robocopy C:\Folder1 D:\Folder2 /COPYALL /E en.wikipedia.org/wiki/Robocopy
Marco Demaio
39

Если у вас есть robocopy,

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

в противном случае,

xcopy /e /v C:\Folder1 D:\Folder2
mghicks
источник
1
Если это копирует содержимое Folder1, что делать, если вы хотите скопировать саму папку?
Кайл Делани
2
@KyleDelaney включает имя исходной папки в место назначения, например "xcopy / e / v C: \ Folder1 D: \ Folder2 \ Folder1 \"
mghicks
1
Обратите внимание , что ROBOCOPY использует \ в качестве экранирующего символа (CMD не делает) , если вы пытаетесь передать в кавычках пути с пробелом и заканчивая слэш , как "C:\My Folder\"вы можете получить неприятный сюрприз. Я рекомендую очень внимательно прочитать эту страницу SS64. Для полного ознакомления с кроличьей ноской «что является escape-символом в CMD» см. « Экранирование двойных кавычек в пакетном сценарии» .
jrh
21

если вы хотите удалить сообщение о том, является ли пункт назначения файлом или папкой, просто добавьте косую черту:

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

ghiboz
источник
16

Я вижу много ответов, предлагающих использовать xcopy. Но в этом нет необходимости. Поскольку в вопросе четко упоминается, что автор хочет, чтобы СОДЕРЖАНИЕ В ПАПКЕ, а не сама папка, копировалась, в этом случае мы можем -:

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

Это все xcopy можно использовать, если вC:\Folder1

Kingzel
источник
1
Это не работает, если папка, в которую вы копируете, еще не существует (я полагаю), поэтому вы можете добавитьmd D:\Folder2
Марк Девен
2
Моя copyкоманда (командная строка Windows 10) сообщает мне, что синтаксис неверен. Следующее будет правильным синтаксисом:copy "C:\Folder1\*.*" "D:\Folder2"
j00hi 01
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
@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
Акаш Дахивелкар
источник
2

На моем ПК для xcopy и robocopy также нужен путь к ним, то есть C: \ Windows \ System32 \ xcopy.exe

Поэтому я использую просто «копировать»: copy / y .... \ Folder1 \ File.txt .... \ Folder2 \

Грязная собака
источник
2
@echo off
xcopy /s C:\yourfile C:\anotherfile\

Вот как это делается! Все просто, правда?

hampusma
источник
0

Вот решение с 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. Если не можете: просто избавьтесь от этого.

Симона
источник
-1

К вашему сведению ... если вы используете TortoiseSVN и хотите создать простой командный файл для периодического копирования (или зеркалирования каталогов) целых репозиториев в "безопасное" место, то это конкретный код, который вы, возможно, захотите использовать. Он копирует скрытые каталоги / файлы, поддерживает атрибуты только для чтения и все подкаталоги и, что самое главное, не запрашивает ввод. Просто убедитесь, что вы правильно назначаете 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%

Вот и все, ребята!

Добавьте к своим запланированным задачам и никогда не оглядывайтесь назад.

TheKirkwoods
источник
-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
Объяснение вашего кода принесет пользу не только тому, кто задает этот вопрос, но и будущим людям, которые наткнутся на него в поисках решения той же проблемы.
Джош Берджесс
3
У вас есть несколько флагов, которые прямо противоречат другим флагам. /Sкопирует каталоги и подкаталоги, кроме пустых, при этом /Eкопирует каталоги и подкаталоги, включая пустые. /Qне отображает имена файлов при копировании, а /Fотображает полные имена исходного и целевого файлов при копировании.
SomethingDark
-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%"
Винод Амаратунга
источник