Команда командной строки для копирования всего каталога (включая каталог) в другой каталог

68

используя командную строку, я хотел бы скопировать один каталог в другой. Например есть каталог C:/testи C:/test2.

Я хотел бы скопировать C:/testв, C:/test2чтобы результат былC:/test2/test

Все , что я нашел до сих пор будет копировать только файлы и папки , содержащиеся в C:/testв C:/test2, но листья из родительского каталога.

Скотт Чемберлен
источник
1
попробуйте использовать xcopy

Ответы:

50

Попробуйте использовать XCOPYс /Eпереключателем. Больше информации здесь .

У меня не было доступа к этой информации из моего мозга в течение многих лет !

ОБНОВИТЬ

В документации сказано , что она копирует все файлы и подкаталоги из исходного каталога ( это означает , что родительский каталог не создается), так что вы должны создать testв C:\test2первую , а затем использовать XCOPY.

vivin
источник
2
Переключатель '/ T' на Xcopy сделает копию структуры каталогов и подкаталогов без каких-либо файлов.
MFG
2
Лучше использовать, robocopy /CREATE /COPYALL /DCOPY:T src dstчтобы просто скопировать папку и пустые файлы, но сохранить все метки времени и другие атрибуты.
user1016274
2
Это фактически не дает ответа на вопрос, потому что папка testеще должна быть создана.
ИГРАЧ
3
@IGRACH Я думал, md testа затем использование xcopyбыло тривиально очевидно.
Вивин
1
Вопрос в том, что copyпапка не создает новую папку, а затем копирует содержимое в нее.
ИГРАЧ
35
xcopy c:\test c:\test2\test /s /e /h

Вот информация о XCOPY [ 1 , 2 ]

Hastur
источник
2
Как перестать просить меня ввести «D»?
YumYumYum
2
@YumYumYum: Вы можете использовать ключ / I: «/ I Если место назначения не существует и копируется более одного файла, предполагается, что место назначения должно быть каталогом».
Тийс Тийсма
18

Используйте ROBOCOPY, если вы создаете сценарии резервного копирования. xcopy устарела и, вероятно, будет выведена из употребления в ближайшем будущем. robocopy может делать все, что может xcopy. Это также более гибкий и надежный. Создание сценариев с помощью robocopy поможет им в будущем.


  1. Используйте robocopy для простого копирования папок. Команда robocopy заменяет команду xcopy. Он может быстро копировать целые папки, не заботясь об определении содержимого. Например, чтобы скопировать все содержимое каталога C: \ tools в новую папку D: \ backup \ tools, введите следующее:

    robocopy C:\tools D:\backup\tools /e
    

    Модификатор / e указывает robocopy включить все подкаталоги. Это включает в себя пустые папки. robocopy автоматически скопирует скрытые и системные файлы. Это создаст новые каталоги, если они не существуют в целевом местоположении.

  2. Зеркальное отображение каталога. Зеркальное отображение каталога отлично подходит для создания резервных копий. Опция зеркальной копии robocopy скопирует все содержимое из источника в место назначения. Затем он удалит все, что не существует в источнике. Это гарантирует, что ваша резервная копия содержит только самые последние версии ваших файлов. Например, для зеркального отображения C: \ Users \ Мои документы в D: \ backup \ My Documents введите следующее: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Эта функция сохранит все разрешения исходных файлов.

  3. Включить перезапуск. Вы можете включить возможность перезапустить процесс в случае разрыва соединения в середине копии.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Записать процесс копирования. robocopy позволяет создать файл журнала. Это может помочь вам точно определить проблемы или создать архив того, что было скопировано.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    Модификатор / log + добавит существующий файл журнала вместо его перезаписи. Если вы предпочитаете просто перезаписать старый файл журнала, используйте /log:.txt.

Программа-Me-Rev
источник
8

Я рекомендую robocopy поверх xcopy , поскольку у него гораздо больше возможностей, включая сохранение временных меток в неизменном виде, что я считаю необходимым.

Robocopy должен быть добавлен в XP / 2003, но он является стандартным начиная с Vista.

На самом деле я обычно использую xxcopy , но 64-битная версия не является бесплатной.

Paradroid
источник
1
robocopyпрограмма для Windows Вопрос был о DOS.
gravity
9
@ grawity: Вероятность того, что он на самом деле использует 16-битный DOS, очень мала по сравнению с высокой вероятностью того, что он назвал CMD «DOS», как это обычно бывает в реальном мире.
парадоид
реальный вопрос: является ли robocopy программой Microsoft?
knocte
@ knocte да, это так
yossico
5
XCOPY SourceDrive: DestinationDrive: /S /E

Например, если вам нужно скопировать E:данные с H:диска на диск (внешний жесткий диск) через командную строку или из командной среды xboot.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Саид Халид Мухаммед
источник
2
/ S не требуется, когда присутствует / E. windows-commandline.com/copy-directory-command-line
Гири
3

Если исходный вопрос - это то, на что я искал ответ, то я, и, очевидно, никто из вышеперечисленных, не нашел четкого решения.

То, что я ищу, это скопировать тестовый каталог в каталог test2, не вводя его снова. Что-то вроде

xcopy /isvy c:\test d:\test2

где d:\test2\testне существует до копирования, но существует после. Это позволит сэкономить на тесте на опечатку во второй раз в пути назначения. Приведенная выше команда скопирует все файлы и любые каталоги в test2, но не создаст тестовый каталог.

До сих пор

xcopy /isvy c:\test d:\test2\test

действительно единственный способ, который я нашел, чтобы сделать эту работу. Опять же, если у вас есть проблемы с печатью, нет никакой гарантии, что каталоги источника и назначения будут совпадать.

Альтернатива, чтобы исправить это

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Это устанавливает каталог назначения в mydirпеременной, а затем использует эту переменную как в исходном, так и в целевом пути. Если вы введете переменную неправильно, вы либо получите ошибку, либо каталог назначения, вероятно, будет иметь %начало и конец.

Это больше, чтобы набрать, но меньше шансов получить неправильные имена. Они будут заметны.

Билл
источник
Это на самом деле xcopy /ievy c:\test d:\test2\testсохранить структуру дерева каталогов, и достаточно set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%только 1 & , так как результат установки значения всегда успешен.
NetWOrchestration
0
xcopy SWITCHES SOURCE DESTINATION

Где SWITCHESможно:

  • Чтобы скопировать всю структуру каталогов:

    /hiev

  • Чтобы перезаписать файлы в месте назначения (если папка назначения уже существует):

    /hievry

  • Для перезаписи, а также копирования с помощью ACL + Attribute:

    /hievxok

Наиболее подходит для вашего случая:

xcopy /hievry C:\test C:\test2\test

NetwOrchestration
источник
0

У меня была похожая ситуация, когда мне нужно было скопировать несколько папок, включая имена папок, в место назначения, и надеялся, что этот вопрос с пометкой «ответил» поможет, но на самом деле это не так.

Во-первых, определенно были случаи, когда кому-то понадобилась бы эта способность, и я столкнулся с ней, когда мне пришлось копировать папки из C: \ Windows \ Assembly \ GAC_MSIL. Проводник Windows отказывается показывать эту папку, поэтому вы должны использовать командную строку.

Если вы знакомы с папкой GAC, вы должны знать, что имена папок нетривиальны, и их легко ошибиться, если вы ошиблись.

Поэтому создание каталога заранее - не вариант, если только вы не используете скрипт, который я в итоге использовал, поскольку это было единственное реальное решение.

Сначала создайте дамп папок, которые вы хотите скопировать во временный файл, обычно это основано на некотором шаблоне, например

dir /B policy* > Folders.txt

Затем переберите записи в дампе и скопируйте их в место назначения. Xcopy позаботится о создании папки, если конечный аргумент завершится обратной косой чертой (\)

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Поместите обе эти команды в командный файл и запустите.

Теперь, если только в xcopy или robocopy это встроено.

mahendrent
источник
0

XCOPY SourceDrive: DestinationDrive: / S / E

Noor All Safaet
источник
Добро пожаловать в Супер пользователя! Вы можете это объяснить? (особенно /S /Eфлаги)
бертиб
0

Я пришел к функциональному альтернативному ответу на ваш вопрос.

Во-первых, использование FORFILESс /Sпараметром означает, что C:\testбудет достигнут каждый подкаталог в .

Во-вторых, с помощью /Cпараметра можно запустить цепочку команд с собственными переменными, что позволяет создавать идентичные каталоги в месте назначения, а затем копировать файлы внутрь них, используя две условные структуры.

Первая условная структура @isdir==TRUE (обязательно используйте заглавные буквы), позволяет получать каталоги только из источника, затем создавать их по назначению MKDIR [path]\@relpathв конце.

Наконец, второй проверяет, что он работает только с файлами @isdir==FALSE, а затем команда COPY просто выполняет свою работу, получая все файлы, достигнутые командой FORFILES, задавая в [path]@relpathкачестве места назначения, чтобы скопировать файлы в только что созданные каталоги.

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Надеюсь, это поможет всем здесь.

MauGusVicen
источник
-2

Это будет сделано из графического интерфейса, не знаю, как они это делают.

«... небольшая программа позволит вам выбрать« из каталога »и« в каталог »и продолжит копировать ТОЛЬКО структуру каталогов.»

http://www.rjlsoftware.com/software/utility/treecopy/

NginUS
источник