пакет / бат, чтобы скопировать папку и контент сразу - PullRequest
31 голосов
/ 21 февраля 2011

Я пишу пакетный скрипт, который делает копию. Я хочу написать скрипт, чтобы скопировать всю папку. Когда я хочу скопировать один файл, я делаю это

copy %~dp0file.txt file.txt 

Если у меня есть папка с этой структурой, есть ли команда скопировать всю эту папку со всем ее содержимым одновременно, сохранив точную структуру.

mainfolder/
  file1.txt
  file2.txt
  insidefolder/
     file3.txt
     file4.txt 
     file5.txt

Ответы [ 5 ]

52 голосов
/ 21 февраля 2011

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

xcopy [source] [destination] /E
9 голосов
/ 06 февраля 2017

по-старому:

xcopy [source] [destination] /E

xcopy is устарело . Robocopy заменяет Xcopy. Поставляется с Windows 8, 8.1 и 10.

robocopy [source] [destination] /E

robocopy имеет несколько преимуществ:

  • копировать пути, превышающие 259 символов
  • многопоточное копирование

Подробнее здесь .

5 голосов
/ 21 февраля 2011

Я подозреваю, что команда xcopy - это волшебная пуля, которую вы ищете.

Может копировать файлы, каталоги и даже целые диски, сохраняя исходную иерархию каталогов. Также доступно несколько дополнительных опций по сравнению с базовой командой copy.

Ознакомьтесь с документацией здесь .

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

0 голосов
/ 30 ноября 2018

меня интересовал оригинал вопрос здесь и связанные с ним.

Для ответа, на этой неделе я сделал несколько эксперименты с XCOPY.

Чтобы помочь ответить на оригинальный вопрос, здесь Я публикую результаты своих экспериментов.

Я делал эксперименты на Windows 7 64 бит Профессиональный SP1 с копией XCOPY который пришел с операционной системой.

Для экспериментов я написал некоторый код в язык сценариев Open Object Rexx и редактор макросов языка Kexx с текстовый редактор KEdit.

XCOPY был вызван из кода Rexx. Код Kexx отредактировал вывод на экран XCOPY сосредоточиться на важнейших результатах.

Все эксперименты были связаны с использованием XCOPY скопировать один каталог с несколькими файлы и подкаталоги.

Эксперимент состоял из 10 случаев. Каждый случай приводил аргументы к XCOPY и позвонил XCOPY один раз. Все 10 случаев были пытаясь сделать то же самое копирование работа.

Вот основные результаты:

(1) Из 10 случаев только три копирование. Остальные 7 случаев сразу, просто от обработки аргументов до XCOPY, выдавал сообщения об ошибках, например,

Invalid path

Access denied

без скопированных файлов.

Из трех дел, которые делали копирование, они все сделали одинаковое копирование, то есть дали те же результаты.

(2) Если хотите скопировать каталог X и все файлы и каталоги в каталоге X, в иерархическом дереве файловой системы корень в каталоге X, то, по-видимому, XCOPY - и это, кажется, большая часть оригинальный вопрос - просто не сделаю что.

Одним из следствий является то, что если использовать XCOPY для скопируйте каталог X и его содержимое, затем МОЖЕТ скопировать содержимое, но НЕ МОЖЕТ скопировать сам каталог X; таким образом, потерять отметка даты и времени в каталоге X, его архивный бит, данные о владении, атрибуты и т. д.

Конечно, если каталог X является подкаталогом каталога Y, XCOPY Y скопирует все содержимое каталога Y С каталог X. Таким образом, таким образом можно получить копию каталога X. Однако копия каталог X будет иметь свою метку даты и времени времени пробега XCOPY и НЕ отметка даты и времени оригинала каталог X.

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

x.htm

x_files

может появляться далеко друг от друга в Время-дата.

Иерархические файловые системы уходят очень далеко, IIRC в Multics в Массачусетском технологическом институте в 1969 году, а с тогда многие люди признали два случая, учитывая каталог X, (i) копия каталог X и все его содержимое и (ii) скопировать все содержимое X, но не Сам каталог X Ну если только из эксперименты, XCOPY делает только (II).

Итак, результаты 10 случаев приведены ниже. Для каждого случая в результатах первый три строки имеют первые три аргумента к XCOPY. Итак, первая строка имеет дерево имя каталога, который будет скопирован, 'источник'; вторая строка имеет дерево название каталога для получения копий, пункт назначения, а третья строка варианты для XCOPY. Остальные 1-2 строки имеют результаты прогона XCOPY.

Одна важная особенность вариантов заключается в том, что Параметры / X и / O приводят к результату

Access denied

Чтобы увидеть это, сравните случай 8 с другим дел, которые были одинаковыми, не было / х и / O, но скопировал.

эти эксперименты у меня лучше понять XCOPY и дать ответ к первоначальному вопросу.

======= case 1 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_1\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 2 ==================
"k:\software\dir_time-date\*"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_2\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 3 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_3\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 4 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_4\"
options = /E /F /G /H /K /R /V /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 5 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_5\"
options = /E /F /G /H /K /O /R /S /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 6 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_6\"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 7 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_7"
options = /E /F /G /H /I /K /R /S /Y
Result:  20 File(s) copied
======= case 8 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_8"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 9 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_9"
options = /I /S
Result:  20 File(s) copied
======= case 10 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_10"
options = /E /I /S
Result:  20 File(s) copied
0 голосов
/ 23 марта 2017

Для копирования папки Вы можете использовать

robocopy C:\Source D:\Destination /E

Для копирования файлов

copy D:\Sourcefile.txt D:\backup\Destinationfile.txt /Y 

Удалить файл в какой-либо папке Дата последнего изменения более чем за один день

forfiles -p "D:\FolderPath" -s -m *.[Filetype eg-->.txt] -d -[Numberof dates] -c "cmd /c del @PATH"

И вы можете запланировать задачу в Windows, чтобы выполнить эту задачу автоматически в определенное время.

...