Ответ 1
если у вас есть xcopy
, вы можете использовать параметр /E
, который скопирует каталоги и подкаталоги и файлы внутри них, включая сохранение структуры каталогов для пустых каталогов
xcopy [source] [destination] /E
Я пишу пакет script, который делает копию. Я хочу script его скопировать всю папку. Когда я хочу скопировать один файл, я делаю это
copy %~dp0file.txt file.txt
Если у меня есть папка с этой структурой, есть ли команда, чтобы копировать всю эту папку со своим содержимым сразу, сохраняя точную структуру.
mainfolder/
file1.txt
file2.txt
insidefolder/
file3.txt
file4.txt
file5.txt
если у вас есть xcopy
, вы можете использовать параметр /E
, который скопирует каталоги и подкаталоги и файлы внутри них, включая сохранение структуры каталогов для пустых каталогов
xcopy [source] [destination] /E
Я подозреваю, что команда xcopy
- это волшебная пуля, которую вы ищете.
Он может копировать файлы, каталоги и даже целые диски, сохраняя исходную иерархию каталогов. Существует также несколько дополнительных опций по сравнению с основной командой copy
.
Ознакомьтесь с документацией здесь.
Если ваш пакетный файл должен запускаться только в Windows Vista или более поздней версии, вы можете вместо этого использовать robocopy
, что является еще более мощным чем xcopy
, и теперь он встроен в операционную систему. Документация доступна здесь.
По старому:
xcopy [source] [destination] /E
xcopy устарел. Robocopy заменяет Xcopy. Он поставляется с Windows 8, 8.1 и 10.
robocopy [source] [destination] /E
robocopy имеет ряд преимуществ:
Подробнее здесь.
Для копирования папки Вы можете использовать
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"
И вы можете разделить задачу в окнах выполнять эту задачу автоматически в определенное время.
Меня интересует оригинальный вопрос здесь и связанные с ним.
Для ответа на этой неделе я провел несколько экспериментов с XCOPY.
Чтобы ответить на исходный вопрос, здесь я публикую результаты своих экспериментов.
Я сделал эксперименты на Windows 7 64-разрядной версии Professional 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 WITH с каталогом X. Таким образом, таким образом можно получить копию каталога X. Однако копия каталога X будет иметь его отметка времени-времени времени запуска XCOPY и NOT штампа даты-времени исходного каталога X.
Это изменение меток даты-времени может оказаться неудобным для копии каталога с большим количеством загруженных веб-страниц. Файл HTML на веб-странице будет иметь свою оригинальную дату-штамп, но соответствующий подкаталог для файлов, используемых HTML файл будет иметь отметку времени выполнения XCOPY. Таким образом, при сортировке копии на отметках даты времени все подкаталоги, файлы HTML и соответствующие подкаталоги, например,
x.htm
x_files
могут появляться далеко друг от друга в сортировке по дате.
Иерархические файловые системы возвращаются назад, IIRC в Multics в MIT в 1969 году, и с тех пор многие люди признали два случая, учитывая каталог X, (i) скопируют каталог X и все его содержимое и (ii) копируют все содержимое X, но не сам каталог X. Ну, если только из экспериментов, XCOPY делает только (ii).
Итак, результаты 10 случаев ниже. Для каждого случая в результатах первые три строки имеют первые три аргумента для XCOPY. Таким образом, первая строка имеет имя дерева каталога, который будет скопирован, "источник"; вторая строка имеет имя дерева каталога для получения копий, "место назначения", а в третьей строке есть опции для XCOPY. Остальные 1-2 строки имеют результаты XCOPY.
Один большой момент о параметрах заключается в том, что опции /X и /O приводят к результату
Access denied
Чтобы увидеть это, сравните случай 8 с другими случаями, которые были одинаковыми, не имели /X и /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