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


68

використовуючи командний рядок, я хотів би скопіювати один каталог в інший. Наприклад, є каталог C:/testі C:/test2.

Я хотів би скопіювати C:/testв C:/test2так що результат будеC:/test2/test

Все , що я знайшов до сих пір тільки копіювати файли і папки , що містяться в C:/testINTO C:/test2, але залишає батьківський каталог.


1
спробуйте скористатися xcopy

Відповіді:


50

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

Я не мав доступу до цієї інформації з мого мозку в роки !

ОНОВЛЕННЯ

У документації сказано , що вона копіює всі файли і підкаталоги з вихідного каталогу ( це означає , що батьківський каталог не створюється), так що ви повинні створити testв C:\test2першу , а потім використовувати XCOPY.


2
Перемикач '/ T' на Xcopy зробить копію каталогів та підкаталогів без будь-яких файлів.
mfg

2
Краще robocopy /CREATE /COPYALL /DCOPY:T src dstскопіюйте папку та порожні файли, але збережіть усі часові позначки та інші атрибути.
користувач1016274

2
Це фактично не дає відповіді на запитання, оскільки папка testвсе ще має бути створена.
ІГРАЧ

3
@IGRACH Я думав, md testа потім використання xcopyбуло тривіально очевидним.
vivin

1
Добре питання полягає в тому, щоб copyпапка не створювала нову папку, а потім копіювала в неї контексти.
IGRACH

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

Ось інформація про XCOPY [ 1 , 2 ]


2
Як перестати просити мене ввести "D"?
YumYumYum

2
@YumYumYum: Ви можете використовувати перемикач / I: "/ I Якщо пункт призначення не існує і копіює більше одного файлу, передбачається, що пункт призначення повинен бути каталогом."
Thijs Tijsma

18

Використовуйте ROBOCOPY, якщо ви створюєте сценарії резервного копіювання. xcopy застарілий і, ймовірно, найближчим часом буде припинено використання. робокопія може робити все, що може xcopy. Він також більш гнучкий і надійний. Створення скриптів за допомогою роботокопії підтвердить їх у майбутньому.


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

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

    Модифікатор / e повідомляє роботокопії включати всі підкаталоги. Сюди входять порожні папки. робокопія автоматично копіює приховані та системні файли. Він створить нові каталоги, якщо вони не існують у цільовому місці.

  2. Дзеркало каталогу. Дзеркальне відображення каталогу чудово підходить для створення резервних копій. Опція дзеркала роботокопії буде копіювати весь вміст з джерела до місця призначення. Потім буде видалено все, що не існує в джерелі призначення. Це гарантує, що у вашій резервній копії є лише найновіші версії ваших файлів. Наприклад, для дзеркального відображення C: \ Users \ My Documents to 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 "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

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


8

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

Робокопію потрібно додати в XP / 2003, але це стандартно від Vista.

Я фактично використовую xxcopy , але 64-бітна версія не є безкоштовною.


1
robocopyце програма Windows. Питання стосувалося DOS.
grawity

9
@grawity: Ймовірність того, що він насправді використовує 16-бітний DOS, дуже невеликий порівняно з високою ймовірністю того, що він викликає CMD "DOS", як це часто в реальному світі.
парадороїд

справжнє питання: чи роботокопіює програму 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 +:

    /hievxok

Найбільше підходить для вашої справи:

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


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.


0

XCOPY SourceDrive: DestinationDrive: / S / E


Ласкаво просимо до Супер Користувача! Чи можете ви пояснити це? (особливо /S /Eпрапори)
bertieb

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

Сподіваюся, що допоможе всім тут.


-2

Це буде робити це з GUI, не знаю, як вони це роблять.

"... невелика програма дозволить вам вибрати" з каталогу "і" в каталог ", і вона перейде до копіювання ТІЛЬКО структури каталогів."

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.