Как скопировать структуру папок без файлов
Как скопировать структуру папок в Windows 10
Как скопировать структуру папок в Windows 10
Когда вы копируете и вставляете папки, все файлы и подпапки копируются вместе. Все файлы остаются в своих соответствующих подпапках, как они должны. Если вам не нужно копировать файлы, а нужно просто реплицировать структуру папок без создания папок вручную, вам следует использовать Xcopy.
Xcopy — это утилита, которая по умолчанию доступна в Windows 10 так что вы можете использовать этот метод из коробки, чтобы скопировать и вставить структуру папок. Вы можете реплицировать структуру в любом месте, например, если папка находится на рабочем столе, вы можете скопировать ее и весь ее подкаталог на внешний диск или в другую папку на другом внутреннем диске.
Копировать структуру папок
Сначала переместите папку, для которой вы хотите скопировать структуру, в новую папку, в которой ничего нет еще в нем.
Откройте окно командной строки. Вам не нужны права администратора для копирования структуры папок, если только вы не планируете создавать / копировать структуру на диск C, который обычно является диском Windows.
Используйте следующую команду, чтобы скопировать структуру папок.
Синтаксис
XCOPY ‘Путь к корневой папке’ ‘Путь к папке назначения’ / T / E
Пример
XCOPY ‘C: UsersfatiwOneDriveDesktopMy Тестовая папка’ D: / T / E
Первый путь — папка, в которую я поместил папку, структуру которой я хочу скопировать. Во втором пути я хочу скопировать его в корневой каталог диска D.
/ T — это переключатель и Это то, что говорит Xcopy копировать только структуру папок, а не файлы в ней. / E указывает Xcopy также включать пустые папки. Конечно, вы можете запустить команду без ключа / E, и структура скопированных папок будет включать в себя только те папки, в которых есть файлы.
Xcopy — довольно мощный инструмент, и для него доступна документация, подробно различные переключатели, которые вы можете использовать с ним. Этот инструмент не предназначен только для копирования папок. Если у вас есть сложная команда копирования, которую вам нужно запустить, этот инструмент — первое, что вы должны проверить. Он уже присутствует в вашей системе и включен в системный путь, поэтому вы можете выполнять команды Xcopy непосредственно из любой папки.
Что делает его немного неудобным, так это то, что он является инструментом командной строки и не имеет графического интерфейса для него. Если вы новичок в использовании инструмента и все еще пытаетесь выяснить правильный синтаксис команды, запустите ее на тестовых папках и файлах, чтобы не потерять ничего важного.
Как скопировать структуру папок в Windows 10
Просмотров сегодня: 175
Как правильно скопировать файлы и папки исключая некоторые из них / Хабр
Топик написан в ответ на похожий.Автор оригинального топика предлагает решить задачу в лоб — а именно, скопировать все файлы а потом удалить не нужные. Это может быть неплохим решением, если вам, конечно, не нужно скопировать всю домашнюю папку на флешку, за исключением вашей коллекции видео.
Но главная проблема этого подхода в другом — он не соответствует идеологии unix: сложные задачи решаются комбинацией простых утилит.
Под катом подробности о методах решения этого класса задач — не рассматривайте это как готовый рецепт.
0. Декомпозиция
Решение любой комплексной задачи начинается с разбора её на составные части. Итак нам нужно скопировать некоторый набор файлов предварительно его отфильтровав.
Значит — получение списка файлов, фильтрация, копирование.
1. Получение списка файлов
Обычно мы просматриваем список файлов программой ls. Её вывод выглядит примерно так:
$ ls -1 dir1 dir2 file1.bin file2.txt
Подходит ли там такой вывод? Нет, потому, что в нем недостаточно информации — нам нужно копировать файлы рекурсивно, значит для нас было-бы гораздо удобнее если первая в нашей цепочке программа выдала там имена файлов вместе с путями.
Следующая программа, которая приходит на ум — find
$ find ./ ./ ./dir1 ./dir1/file7.txt ./dir2 ./file1.bin ./file2.txt
Уже лучше но в вывод попали и директории, а они нам не нужны. Попробуем так:
$ find ./ -type 'f' ./dir1/file7.txt ./file1.bin ./file2.txt
Вот то, что там нужно. Список файлов.
2. Фильтрация
Этот список файлов нужно отфильтровать. Перенаправим вывод нашей предыдущей комманды в программу grep.
$ find ./ -type 'f' | grep 2 ./dir2 ./file2.txt
Хорошо, но в условиях задачи стоит исключать файлы, так что немного поменеяем наш конвейер
$ find ./ -type 'f' | grep -v 2 ./dir1/file7.txt ./file1.bin
Первые две части выполнены.
3. Копирование
Из man-страницы для команды cp мы можем узнать, что исходный файл нужно передавать программе cp в качестве аргумента, а мы пока можем только перенаправить список на стандартный ввод.
Применим утилиту xargs — она принимает стандартный ввод и вызывает указанную программу с параметрами из стандартного ввода. Итак:
$ find ./ -type 'f' | grep -v 2 | xargs -n 1 -I % cp --parents "%" /path/to/dest/dir/
-n 1 значит, что только одна строка из стандартного ввода подставляется в комманду, а -I % — определяет символ, который будет заменен в целевой комманде на строчку из стандартного ввода. В нашем случае это будет
cp --parents "./dir1/file7.txt" /path/to/dest/dir/ cp --parents "./file1.bin" /path/to/dest/dir/
Можно считать, что задача решена.
Вместо заключения
Я надеюсь что это описание поможет правильно подходить к решению как таких простых так и более комплексных задач.
Хочется отметить, что
- Это топик способах решения задач и немного о применении конвейера, а не о копировании файлов
- Этот способ далеко не едиственный и даже не самый короткий, а наиболее наглядный для демонстрации методологии решения.
- В случае этой конкретной задачи будет быстрее воспользоваться
find ./ -type f ! -name "*2*" -exec cp --parents -t /target/dir "{}" \+
- Лично я воспользовался-бы
tar --exclude=2 -cf - ./ | ( cd /path/to/dest/ && tar -xvf - )
- Т.к. это первый мой топик, буду рад конструктивной критике
Как скопировать структуру каталогов, но включать только определенные файлы (с помощью пакетных файлов windows)
как говорится в заголовке, Как я могу рекурсивно копировать структуру каталогов, но включать только некоторые файлы. Например, учитывая следующую структуру каталогов:
folder1 folder2 folder3 data.zip info.txt abc.xyz folder4 folder5 data.zip somefile.exe someotherfile.dll
файлы данные.zip и информация.txt может отображаться везде в структуре каталогов. Как скопировать полную структуру каталогов, но включать только файлы с именем data.ZIP и информация.txt (все остальные файлы следует игнорировать)?
полученная структура каталогов должна выглядеть так это:
copy_of_folder1 folder2 folder3 data.zip info.txt folder4 folder5 data.zip
15 ответов
вы не упоминаете, должен ли он быть только пакетным, но если вы можете использовать ROBOCOPY
, попробуйте это:
ROBOCOPY C:\Source C:\Destination data.zip info.txt /E
EDIT: изменено до /E
включить пустые папки.
альтернативное решение, которое копирует один файл за раз и не требует ROBOCOPY:
@echo off setlocal enabledelayedexpansion set SOURCE_DIR=C:\Source set DEST_DIR=C:\Destination set FILENAMES_TO_COPY=data.zip info.txt for /R "%SOURCE_DIR%" %%F IN (%FILENAMES_TO_COPY%) do ( if exist "%%F" ( set FILE_DIR=%%~dpF set FILE_INTERMEDIATE_DIR=!FILE_DIR:%SOURCE_DIR%=! xcopy /E /I /Y "%%F" "%DEST_DIR%!FILE_INTERMEDIATE_DIR!" ) )
оператор outer for генерирует любую возможную комбинацию подкаталогов пути в SOURCE_DIR
и имя FILENAMES_TO_COPY
. Для каждого существующего файла вызывается xcopy. FILE_INTERMEDIATE_DIR
содержит путь к подкаталогу файла в SOURCE_DIR
который необходимо создать в DEST_DIR
.
попробуйте трубопроводный выход find (ie. путь к файлу) в cpio
find . -type f -name '*.jpg' | cpio -p -d -v targetdir/
cpio проверяет метку времени в целевых файлах - так что это безопасно и быстро.
remove-v для более быстрого op, как только вы привыкнете к нему.
11
автор: Gabe Rainbow
Благодаря Предыдущим Ответам. :)
этот скрипт с именем " r4k4copy.cmd":
@echo off for %%p in (SOURCE_DIR DEST_DIR FILENAMES_TO_COPY) do set %%p= cls echo :: Copy Files Including Folder Tree echo :: http://stackoverflow.com rem /questions/472692/how-to-copy rem -a-directory-structure-but-only rem -include-certain-files-using-windows echo :: ReScripted by r4k4 echo. if "%1"=="" goto :NoParam if "%2"=="" goto :NoParam if "%3"=="" goto :NoParam setlocal enabledelayedexpansion set SOURCE_DIR=%1 set DEST_DIR=%2 set FILENAMES_TO_COPY=%3 for /R "%SOURCE_DIR%" %%F IN (%FILENAMES_TO_COPY%) do ( if exist "%%F" ( set FILE_DIR=%%~dpF set FILE_INTERMEDIATE_DIR=!FILE_DIR:%SOURCE_DIR%=! xcopy /E /I /Y "%%F" "%DEST_DIR%!FILE_INTERMEDIATE_DIR!" ) ) goto :eof :NoParam echo. echo Syntax: %0 [Source_DIR] [Dest_DIR] [FileName] echo Eg. : %0 D:\Root E:\Root\Lev1\Lev2\Lev3 *.JPG echo Means : Copy *.JPG from D:\Root to E:\Root\Lev1\Lev2\Lev3
Он принимает переменную "Source", "Destination"и " FileName". Он также может копировать только указанный тип файлов или выборочные имена файлов.
любое улучшение приветствуется. :)
Если Powershell является опцией, вы можете сделать следующее:
Copy-Item c:\sourcePath d:\destinationPath -filter data.zip -recurse
основным недостатком является то, что он копирует все папки, даже если они будут пустыми, потому что файлы не соответствуют указанному фильтру. Таким образом, вы можете получить дерево, полное пустых папок, в дополнение к нескольким папкам с нужными файлами.
подобно решению Паулиуса, но файлы, которые вас не волнуют, не копируются, а затем удаляются:
@echo OFF :: Replace c:\temp with the directory where folder1 resides. cd c:\temp :: You can make this more generic by passing in args for the source and destination folders. for /f "usebackq" %%I in (`dir /b /s /a:-d folder1`) do @echo %%~nxI | find /V "data.zip" | find /v "info.txt" >> exclude_list.txt xcopy folder1 copy_of_folder1 /EXCLUDE:exclude_list.txt /E /I
4
автор: Patrick Cuff
только с find и cp:
mkdir /tmp/targetdir cd sourcedir find . -type f -name '*.zip' -exec cp -p --parents {} /tmp/targetdir ";" find . -type f -name '*.txt' -exec cp -p --parents {} /tmp/targetdir ";"
Это только две простые команды, но я бы не рекомендовал это, если файлы, которые вам не нужно копировать, небольшие. Это потому, что это скопирует все файлы, а затем удалите файлы, которые не нужны в копии.
xcopy /E /I folder1 copy_of_folder1 for /F "tokens=1 delims=" %i in ('dir /B /S /A:-D copy_of_files ^| find /V "info.txt" ^| find /V "data.zip"') do del /Q "%i"
конечно, вторая команда длинная, но она работает!
кроме того, этот подход не требует загрузки и установки каких-либо сторонних инструментов (для этого в пакете Windows 2000+ достаточно команд).
XCOPY /S folder1\data.zip copy_of_folder1 XCOPY /S folder1\info.txt copy_of_folder1
EDIT: Если вы хотите сохранить пустые папки (которые, при перечитывании вашего поста, вы, похоже, используете), используйте /E вместо /S.
используя интерфейс командной строки WinRAR, вы можете скопировать имена файлов и / или типы файлов в архив. Затем вы можете извлечь этот архив в любое место, которое вам нравится. Это сохраняет исходную файловую структуру.
Мне нужно было добавить отсутствующие файлы фотографий альбома на свой мобильный телефон без необходимости переписывать саму музыку. К счастью, структура каталогов была такой же на моем компьютере и мобильном телефоне!
I используется:
rar a -r C:\Downloads\music.rar X:\music\Folder.jpg
- C:\Downloads\music.rar = архив для создания
- X:\music\ = папка, содержащая музыкальные файлы .jpg = имя файла, которое я хотел скопировать
это создало архив со всей папкой.JPG файлы в соответствующих подкаталогах.
этот метод также можно использовать для копирования типов файлов. Если все файлы имеют разные имена, вы можете извлечь все файлы в один каталог. Дополнительный параметры командной строки могут архивировать несколько типов файлов.
дополнительная информация в этой очень полезной ссылке http://cects.com/using-the-winrar-command-line-tools-in-windows/
в Linux и других системах UNIX, используя tar
команда сделает это легко.
$ tar cvf /tmp/full-structure.tar *data.zip *info.txt
затем вы бы cwd к цели и:
$ tar xvf /tmp/full-structure.tar
конечно, вы можете передать вывод из первого tar во 2-й, но, видя, что он работает поэтапно, легче понять и объяснить. Мне не хватает необходимого cd /to/new/path/ в следующей команде - я просто не помню, как это сделать сейчас. Надеюсь, кто-то еще сможет добавить его.
$ tar cvf - *data.zip *info.txt | tar xvf -
Тар (gnutar) также доступен в Windows, но я бы, вероятно, использовал xcopy
метод себя на этой платформе.
для тех, кто использует Саламандер Сайт Altap (2 panels file manager): в параметрах всплывающего окна копировать просто укажите имена файлов или маски. Простой.
Я в порядке с регулярными выражениями, ленив и не люблю установки, поэтому я создал пакетный файл, который создает каталог и копирует команды vanilla DOS. Кажется трудоемким, но быстрее для меня, чем разработка robocopy.
- Создайте список исходных файлов с полными путями, включая букву диска, если nec, в текстовом файле.
- включите регулярные выражения в текстовом редакторе.
- добавить двойные кавычки вокруг каждой строки в случае пробелов - строка поиска
(.*)
заменить строку""
, и нажмите кнопку Заменить все - создать две строки на файл-один для создания каталога, один для копирования файла (qqq будет заменен на путь назначения) - строка поиска
(.*)
заменить строкуmd qqq\nxcopy qqq\n
и нажмите кнопку Заменить все - удалить имя файла из пути назначения – поиск
\([^\^"]+)"\n
заменить\"\n
- заменить в пути назначения (в данном примере
A:\src
иB:\dest
). Выключить обычный выражения, поискqqq"A:\src\
заменитьB:\dest\
и нажмите кнопку Заменить все.
md создаст вложенные каталоги. копия, вероятно, будет вести себя идентично xcopy в этом примере. Вы можете добавить /Y в xcopy, чтобы подавить подтверждение перезаписи. Вы получаете пакетный файл, например:
md "B:\dest\a\b\c\" xcopy "C:\src\a\b\c\e.xyz" "B:\dest\a\b\c\e.xyz"
повторяется для каждого файла в исходном списке. Проверена на Win7.
для этого с помощью перетаскивания используйте winzip есть опция сохранения структуры dir. Просто создайте новый .zip на уровне каталога, который будет вашим корнем и перетащить файлы.
скопировать все текстовые файлы в G: и сохранить структуру каталогов:
xcopy *.txt /s G:
-1
автор: Osbert Snudge
XCOPY - копирование файлов и каталогов.
Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке WindowsФормат командной строки:
XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]...]
Параметры командной строки:
источник - Копируемые файлы.
целевой_объект - Расположение или имена новых файлов.
/A - Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.
/M - Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.
/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.
/EXCLUDE:файл1[+файл2][+файл3]... - Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.
/P - Вывод запросов перед созданием каждого нового файла.
/S - Копирование только непустых каталогов с подкаталогами.
/E - Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.
/V - Проверка размера каждого нового файла.
/W - Вывод запроса на нажатие клавиши перед копированием.
/C - Продолжение копирования вне зависимости от наличия ошибок.
/I - Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.
/Q - Запрет вывода имен копируемых файлов.
/F - Вывод полных имен исходных и целевых файлов.
/L - Вывод имен копируемых файлов.
/G - Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.
/H - Копирование, среди прочих, скрытых и системных файлов.
/R - Перезапись файлов, предназначенных только для чтения.
/T - Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.
/U - Копирование только файлов, уже имеющихся в целевом каталоге.
/K - Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты "Только для чтения".
/N - Использование коротких имен при копировании.
/O - Копирование сведений о владельце и данных ACL.
/X - Копирование параметров аудита файлов (подразумевает ключ /O).
/Y - Подавление запроса подтверждения на перезапись существующего целевого файла.
/-Y - Запрос подтверждения на перезапись существующего целевого файла.
/Z - Копирование сетевых файлов с возобновлением.
/B - Копирование символической ссылки вместо ее целевого объекта.
/J - Копирование с использованием небуферизованного ввода/вывода. Рекомендуется для очень больших файлов.
Ключ /Y можно установить через переменную среды COPYCMD.
Ключ /-Y командной строки переопределяет такую установку.
Примеры использования XCOPY
XCOPY /? - выдать краткую справку по использованию команды.
xcopy C:\users D:\copy1 - скопировать файлы из каталога C:\users в каталог D:\copy1 . Будет выполняться копирование без подкаталогов и только файлов без атрибутов "Скрытый" и "Системный". Для скопированных файлов будет установлен атрибут Архивный. Если каталог, в который выполняется копирование, не существует, то пользователю будет выдано сообщение:
Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D
После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:
xcopy C:\users D:\copy1 /I
xcopy C:\users D:\copy1 /H /Y /C - копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут "Только чтение", то копирование не выполняется. Для перезаписи таких файлов используется ключ /R
xcopy C:\users D:\copy1 /H /Y /C /R /S - скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом "Только чтение" (/R) и игнорированием ошибок ( /C )
xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:
\User1\ - исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* - исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание "de"
xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe.
xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I - копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .
xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 - то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.
xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T - создать структуру папок диска C: в каталоге D:\copy1\LISTDIR. Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.
xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.
Для добавления новых файлов в каталоги и обновления существующих на более поздние версии, можно использовать команду REPLACE.
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой "Поделиться"
Весь список команд CMD Windows
описание команды и примеры использования
- Bot
- 29.01.2020
- 7 986
- 0
- 02.11.2020
- 7
- 6
- 1
- Содержание статьи
Описание
XCOPY - Копирует файлы и каталоги, включая подкаталоги.
Синтаксис
xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [{/y|/-y}] [/z]
Параметры
Параметр | Описание |
---|---|
источник | Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь. |
результат | Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. |
/w | Выводит следующее сообщение с ожиданием подтверждения начала копирования: Нажмите любую клавишу, чтобы начать копирование файлов |
/p | Запрашивает подтверждение при создании каждого файла-результата. |
/c | Игнорирует ошибки. |
/v | Проверяет каждый скопированный файл на соответствие его оригиналу. |
/q | Отменяет вывод на экран сообщений команды xcopy. |
/f | Выводит имена исходных файлов и файлов-результатов в процессе копирования. |
/l | Отображает список копируемых файлов. |
/g | Создает незашифрованные файлы-результаты. |
/d[:мм-дд-гггг] | Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг, команда xcopy копирует все файлы-источники, которые новее существующих файлов-результатов. Эта возможность позволяет обновлять только измененные файлы. |
/u | Копирует (обновляет) только те файлы-источники, которые уже существуют в каталоге результата. |
/i | Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат — это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом. |
/s | Копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом. |
/e | Копирует все подкаталоги, включая пустые. Параметр /e используется с параметрами /s и /t. /t Копирует только структуру подкаталога (т. е. дерево), а не файлы. Для копирования пустых каталогов следует задать ключ /e. |
/k | Копирует файлы с атрибутом "только для чтения" с сохранением этого атрибута для скопированных файлов, оригиналы которых имеют этот атрибут. По умолчанию команда xcopy удаляет атрибут "только для чтения". |
/r | Копирует файлы с атрибутом "только для чтения". |
/h | Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы. |
/a | Копирует только те файлы, которые имеют установленный атрибут «архивный». При использовании параметра /a атрибут "архивный" у исходных файлов не меняется. |
/m | Копирует только те файлы, которые имеют установленный атрибут «архивный». В отличие от параметра /a, параметр /m очищает атрибут «архивный» у скопированных файлов. |
/n | Копирует с использованием коротких имен файловой системы NTFS. Параметр /n требуется при копировании из файловой системы NTFS в файловую систему FAT или когда на диске-результате требуется использование соглашения об именах файлов как в файловой системе FAT (8.3). Файлы могут записываться в файловую систему FAT или NTFS. |
/o | Копирует сведения о принадлежности файлов и избирательной таблице управления доступом (DACL). |
/x | Копирует сведения о параметрах аудита файла и системной таблице управления доступом (SACL) (подразумевается наличие /p). /exclude:файл1[+[файл2]][+[файл3]] Определяет список файлов, содержащих строки. |
/y | Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. |
/-y | Выдает запрос на подтверждение перезаписи существующего конечного файла. |
/z | Копирует по сети в режиме перезапуска. |
/? | Отображает справку в командной строке. |
Примечания
-
- Использование параметра /exclude
Построчный вывод всех строк в каждом файле. При соответствии выведенной строки части пути копируемого файла, он исключается из процесса копирования. Например, если указана строка «\Obj\», исключается все файлы, расположенные в каталоге «Obj». Например, если указана строка «.obj», исключается все файлы с расширением .obj. - Использование параметра /z
Если во время фазы копирования теряется сетевое подключение (например, если сервер переходит автономный режим, разрывая подключение), копирование возобновляется после восстановления подключения. Использование параметра /z команды вызывает также отображение доли (в процентах) завершенной операции копирования для каждого файла. - Использование параметра /y в переменной среде COPYCMD. Можно применять параметр /y в переменной среде COPYCMD. Эта настройка может быть переопределена использованием параметра /-y в командной строке. По умолчанию если команда copy выполняется не в пакетной программе, при замене требуется подтверждение.
- Копирование зашифрованных файлов
При копировании файлов на том, не поддерживающий шифрованную файловую систему (EFS), возникнет ошибка. Следует предварительно расшифровать файлы или копировать их на том, поддерживающий EFS. - Добавление файлов
Чтобы объединить файлы, укажите один файл-результат, но несколько файлов-источников (с помощью подстановочных знаков или формата файл1+файл2+файл3). - Значение по умолчанию для результата
Если параметр результат не задан, xcopy будет копировать файлы в текущий каталог. - Указание в качестве результата файла или каталога
Если параметр результат не содержит существующий каталок или не заканчивается обратной чертой(\), выводится следующее сообщение:Что означает destination:
имя файла или каталога
(F = файл, D = каталог)?Нажмите F, если файл или файлы должны копироваться в файл. Нажмите D, если файл или файлы должны копироваться в каталог.Чтобы устранить вывод этого сообщения, используйте параметр /i. В результате чего, команда xcopy предполагает, что результат является каталогом, если источник престаляет собой несколько файлов или каталогов. - Использование команды xcopy для установки атрибута «архивный» для файлов результата
Команда xcopy создает файлы с установленным атрибутом «архивный», независимо от состояния этого атрибута у исходных файлов. - Сравнение команд xcopy и diskcopy
Команда xcopy должна быть использована вместо diskcopy при копировании файлов и подкаталогов на диск другого формата. Так как команда diskcopy копирует диски по дорожкам, требуется, чтобы исходный диск и диск-результат имели одинаковый формат. Для команды xcopy это требование не нужно. Обычно следует использовать команду xcopy, если только не требуется получить два диска с одинаковыми образами. - Коды завершения программы xcopy
- Использование параметра /exclude
Для анализа кодов завершения, выведенных командой xcopy, используйте параметр уровень_ошибки в командной строке if пакетных программ.
В следующей таблице перечислены коды завершения с кратким описанием.
Код завершения | Описание |
---|---|
0 | Файлы скопированы без ошибок |
1 | Файлы для копирования не найдены |
2 | Нажата комбинация CTRL+C для остановки команды xcopy |
4 | Возникла ошибка инициализации. Недостаточно места в памяти или на диске, введено неверное имя диска или неверный синтаксис вызова команды |
5 | Диск защищен от записи |
Примеры использования
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска A на диск B, введите:
xcopy a: b: /s /e
Чтобы включить в операцию копирования предыдущего примера системные и скрытые файлы следует использовать параметр /h:
xcopy a: b: /s /e /h
Чтобы обновить файлы в каталоге \Reports файлами из каталога \Rawdata, измененными после 29 декабря 1993 года, введите:
xcopy \rawdata \reports /d:29-12-1993
Чтобы обновить файлы предыдущего примера, уже существующие в каталоге \Reports, независимо от их даты, введите следующую команду:
xcopy \rawdata \reports /u
Чтобы получить списк файлов, которые были бы скопированы в предыдущем примере, следует ввести команду:
xcopy \rawdata \reports /d:29-12-1993 /l > xcopy.out
Список файлов, которые были бы скопированы, находится в файле Xcopy.out.
Чтобы скопировать каталог \Customer и все подкаталоги \\Public\Address на сетевой диск H, сохранить у файлов атрибут «только для чтения», введите команду:
xcopy \customer h:\public\address /s /e /k /p
Чтобы выдать предыдущую команду, убедиться, что команда xcopy создает каталог \Address и устранить вывод сообщение о создании нового каталога, добавьте параметр /i следующим образом:
xcopy \customer h:\public\address /s /e /k /p /i
Для запуска программы xcopy и анализа кодов завершения можно создать пакетный файл и использовать оператор if для обработки кодов завершения в случае возникновения ошибок. Например, следующая пакетная программа использует замещаемые параметры для задания источникаxcopy и результата:
@echo off
rem COPYIT.BAT копирует все файлы во всех подкаталогах
rem исходного диска или каталога (%1) на другой диск
rem или в другой каталог (%2)
?? xcopy %1 %2 /s /e
??if errorlevel 4 goto lowmemory
?if errorlevel 2 goto abort
?if errorlevel 0 goto exit
??:lowmemory ?
echo Недостаточно памяти для копирования файлов,
задан недопустимый ?echo диск или ошибка в синтаксисе командной строки.
?goto exit
??
:abort ?
echo Нажата комбинация CTRL+C для остановки копирования.
?goto exit ?
?
:exit
Эта пакетная программа может быть использована для копирования всех файлов каталога C:\Prgmcode и его подкаталогов на диск B следующим образом:
copyit c:\prgmcode b:
Командный интерпретатор подставляет C:\Prgmcode вместо параметра %1 и B вместо параметра %2, затем использует команду xcopy с параметрами /e и /s. Если при выполнении xcopy произошла ошибка, пакетная программа считывает код завершения и переходит на метку, указанную в соответствующей инструкции IF ERRORLEVEL. В результате на экран выводится сообщение о характере ошибки и осуществляется выход из пакетной программы.
Справочная информация
Copy-Item копирование файлов и папок из PowerShell
PowerShell командлет Copy-Item используется для копирования файлов между локальными, сетевыми каталогами или между компьютерами по сети через WinRM. Командлет Copy-Item предоставляет большое количество опций, которые можно использовать в разных сценариях копирования файлов и каталогов (по своим возможностям этот командлет почти не уступает утилите robocopy). Например:
- перезапись файлов (override)
- фильтрация по имени/шаблону
- исключение по имени/шаблону
- Verbose режим
- Копирование файлов с/на удаленные компьютеры
Начнем с простых примеров использования Copy-Item и будем переходить к более сложным.
Копирование файлов и каталогов
Чтобы скопировать один файл 1.txt из каталога C:\SourceFolder\ в F:\DestFolder\, выполните:
Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt"
Можно использовать сокращенный синтаксис командлета, пропустив указание параметров Path и Destination:
cpi "C:\SourceFolder\1.txt" "F:\DestFolder\1.txt"
Теперь скопируем каталог C:\SourceFolder\folder в F:\DestFolder\folder. В папке folder находится файл 1.txt. Обратите внимание что без ключа –Recurse, папка folder копируется без содержимого:
Copy-Item -Path "C:\SourceFolder\folder" -Destination "F:\DestFolder\folder" -Recurse
С помощью Copy-Item также можно просто объединить файлы из несколько директорий в одну (слияние директории), для этого нужно перечислить директории в ключе –Path:
Copy-Item -Path "C:\SourceFolder\*", "C:\SourceFolder2\*", "C:\SourceFolder3\*" -Destination "F:\DestFolder\"
Копирование с заменой и копирование с заменой read-only файлов
Copy-Item по умолчанию при копировании заменяет файлы в целевом каталоге. Никаких дополнительных параметров указывать не нужно. При копировании каталога, если нужно заменить каталог в целевой папке, нужно использовать ключ –Force, иначе будет ошибка “Элемент folder с указанным именем уже существует — DirectoryExists”.
Для перезаписи файла с атрибутом read-only, нужно использовать ключ -Force. Если его не использовать, вы получите ошибку “отказано в доступе по пути… CopyFileInfoItemUnauthorizedAccessError”.
Чтобы скопировать файл с перезаписью файла с read-only атрибутом используйте параметр Force.
Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt" -Force
Совет. Чтобы не путаться, ключ –Force можно рассматривать как ключ для копирования с заменой.
Чтобы Copy-Item скопировал файлы из одной папки в другую без замены существующих файлов, можно использовать этот простой скрипт
Copy-Item (Join-Path "C:\SourceFolder\" "*") "F:\DestFolder\" -Exclude (Get-ChildItem "F:\DestFolder\") -Recurse
Этот скрипт скопирует все файлы и папки из C:\SourceFolder в F:\DestFolder без замены файлов уже существующих в F:\DestFolder
Копирование с фильтрацией по шаблону
С помощью Copy-Item можно скопировать файлы/директории выбранные с помощью wildcard символа * или с помощью символа ?. Также поддерживаются некоторые регулярные выражения
- * — обозначает любое количество любых символов
- ? – обозначает 1 любой символ
- [a-z], [0-9] – символы между a-z и цифры между 0 и 9
Для примера возьмём такую структуру файлов:
Выполним копирование командой:
Copy-Item -Path "C:\SourceFolder\fol*" -Destination "F:\DestFolder\"
Результат в F:\DestFolder\
Теперь чистим папку назначения и выполняем:
Copy-Item -Path "C:\SourceFolder\folder[0-3]" -Destination "F:\DestFolder\"
Результат:
Папка без цифры в окончании не скопировалась, потому что folder[0-3] подразумевает что после folder будет как минимум еще 1 символ между 0 и 3
Исключение файлов при копировании
С помощью ключа –Exclude можно исключить файлы при копировании. Например, следующай команда скопирует все файлы кроме файлов с расширением txt.
Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Exclude "*.txt"
Аналогичным же образом можно применить ключ –Include, например
Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Include "*.txt"
Скопирует только txt файлы. Хотя для простоты гораздо удобнее использовать при копировании вид -Path "C:\SourceFolder\*.txt"
.
Копирование файлов на удаленный компьютер по сети
Copy-File может копировать не только по SMB протоколу, но и через WinRM (WSMan).
Создайте новую сессию с компьютером testnode1 и выполните копирование в её контексте:
$session = New-PSSession -ComputerName testnode1
Copy-Item -Path "C:\SourceFolder\*" -ToSession $session -Destination "C:\SourceFolder\" -Recurse -Force
Эта команда скопирует файлы с локального компьютера из директории C:\SourceFolder на компьютер testnode1 в C:\SourceFolder\.
Примечание. Доступность WSMan на удаленном компьютере можно проверить с помощью командлета Test-WSMan.Test-WSMan -ComputerName testnode1
Если WSMan не настроен, вы можете выполнить его быструю конфигурацию. Для этого откройте командную строку с правами администратора и выполните winrm quickconfig
Также можно копировать и через обычные сетевые SMB шары, для этого просто используйте UNC формат сетевого пути.
Copy-Item -Path "C:\SourceFolder\*" -Destination "\\testnode1\C$\copy_tutorial\"
Можно скопировать файл с удаленного компьютера. Принцип такой же, как и при копировании файлов на удаленный компьютер, за исключением параметра –ToSession, вместо него нужно использовать –FromSession:
$session = New-PSSession -ComputerName testnode1
Copy-Item -FromSession $session -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force
Эта команда скопирует содержимое папки C:\SourceFolder\ с компьютера testnode1 на локальный компьютер в директорию F:\DestFolder
Ключ PassThru
Командлет Copy-Item (как и многие другие командлеты PowerShell) не возвращает результатов в консоль. Параметр PassThru применяется скриптах, или для лог-файлов, когда нужно получить список скопированных файлов и работать с ним дальше. Рассмотрим пример
$items = Copy-Item -Path "C:\SourceFolder\*" –Destination "\\testnode1\C$\copy_tutorial\" -PassThru
Переменная $items
будет содержать список скопированных файлов, с которым вы можете работать дальше.Это значит что вы можете напрямую работать с этими файлами. Например выполнив команду Remove-Item $items[0]
, вы удалите директорию folder.
Ключ Verbose
При использовании ключа -Verbose вы получите подробный лог операций копирования. Например, вывод команды
Copy-Item -Path "C:\SourceFolder\*.txt" -Destination "F:\DestFolder\" -Recurse -Force -Verbose
Несколько полезных скриптов с Copy-Item
Скопировать только файлы:
Get-ChildItem "C:\SourceFolder" -File -Recurse | Copy-Item -Destination "F:\DestFolder"
Скопировать структуру папок, без файлов:
$path = Get-ChildItem "C:\SourceFolder" -Recurse | ?{$_.PsIsContainer -eq $true}
$dest = "F:\DestFolder\"
$parent = $path[0].Parent.Name
$path | foreach {
$_.FullName -match "$parent.+"
New-Item -ItemType directory ($dest + $Matches[0])
}
Copy-Item очень простой и удобный в использовании командлет PowerShell для выполнения операций копирования и перемещения файлов. В сочетании с другими инструментами PowerShell, Copy-Item также является мощным инструментом для написания скриптов.
linux - копирование структуры папок (без файлов) из одного места в другое
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и
Как скопировать всю структуру папок без копирования файлов (совет для начала нового финансового года) - Кэмерон Дуайер
Вот мой совет, чтобы начать финансовый год с какой-нибудь организацией. Если вы сохраните важные файлы в структуре папок за финансовый год, тогда вы будете готовы создать эту новую папку для нового налогового года. Чтобы сэкономить время и сохранить единообразную структуру файлов, вы можете быстро скопировать всю структуру (включая все подпапки) с помощью следующей техники.При использовании этой техники копируется только структура папок (а не сами файлы). Таким образом, вы будете работать со своей новой структурой папок на налоговый год и продолжать подавать документы.
Вот упрощенная версия моей файловой структуры:
Теперь просто создайте новую папку (в которой вы хотите продублировать структуру папок)
Теперь откройте командное окно Windows и выполните следующую команду. Параметр / T копирует только структуру папок, а не файлы.Вы также можете использовать параметр / E, чтобы включить в копию пустые папки (по умолчанию пустые папки не копируются).
xcopy «c: \ users \ cdwyer \ documents \ 2012-2013» «c: \ users \ cdwyer \ documents \ 2013-2014» / T / E
Работа выполнена, теперь вы должны увидеть свою скопированную структуру папок, готовую начать регистрацию в новом году.
Нравится:
Нравится Загрузка ...
Связанные
Опубликовано Кэмерон Дуайер
Главный технический директор OnePlace Solutions.Microsoft MVP: Office Dev С энтузиазмом относитесь к разработке эффективных решений на платформе Office 365 / SharePoint. Пристрастие к кофе. Просмотреть все сообщения Кэмерон Дуайер
.Как скопировать структуру каталогов, но включить только определенные файлы (с использованием пакетных файлов Windows)
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Стак
javascript - Как скопировать несколько файлов и сохранить структуру папок с помощью Gulp
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант
Как мне заставить MSBuild копировать все файлы, помеченные как Content, в папку с сохранением структуры папок?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- найдите структуру папок и скопируйте в другую папку в ОС Windows
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы