it-swarm-ru.tech

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

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

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

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

62
agezna

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

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

ОБНОВИТЬ

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

48
vivin
xcopy c:\test c:\test2\test /s /e /h

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

32
Zachary

Используйте 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.

15
Program-Me-Rev

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

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

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

8
paradroid
XCOPY SourceDrive: DestinationDrive: /S /E

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

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
5
Syed khalid Mohammed

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

То, что я ищу, это скопировать тестовый каталог в каталог 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, затем использует эту переменную как в исходном, так и в целевом пути. Если вы введете переменную неправильно, вы либо получите ошибку, либо каталог назначения, вероятно, будет иметь % в начале и конце.

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

3
Bill

XCOPY SourceDrive: DestinationDrive:/S/E

0
Noor All Safaet
xcopy SWITCHES SOURCE DESTINATION

Где SWITCHES может быть:

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

    /hiev

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

    /hievry

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

    /hievxok

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

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

0
NetwOrchestration

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

Во-первых, использование 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)"

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

0
MauGusVicen

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

Во-первых, определенно были случаи, когда кому-то понадобилась бы эта способность, и я столкнулся с ней, когда мне пришлось копировать папки из 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 это встроено.

0
mahendrent