60

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

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

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

11 ответов11

47

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

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

ОБНОВИТЬ

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

31
xcopy c:\test c:\test2\test /s /e /h

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

14

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

8

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

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

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

5
XCOPY SourceDrive: DestinationDrive: /S /E

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

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
2

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

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

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

0

XCOPY SourceDrive: DestinationDrive: /S /E

0
xcopy SWITCHES SOURCE DESTINATION

Где могут быть SWITCHES :

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

    /hiev

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

    /hievry

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

    /hievxok

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

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

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)"

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

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 это встроено.

-2

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .