Как скопировать папки без содержимого
Перейти к содержимому

Как скопировать папки без содержимого

  • автор:

Как скопировать толкьо структуру папок, без файлов?

К примеру имеется папка, в ней есть под папки, и в каждой из подпапок есть еще папки, а в них лежат файлы.
Вот как мне скопировать все кроме файлов? Т.е мне нужны толкьо пустые папки и подпапки в той же структуре, что и были но без файлов.

Дополнен 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Лучший ответ

xcopy d:\source\*.* d:\destination /t /e
где source — источник структуры папок, а destination — папка назначения, где будет создаваться пустая структура.
Подробнее — xcopy /?

Остальные ответы
написать прогу, которая будет это делать, по другому ни как
CeleronОракул (55904) 13 лет назад
Вы издиваетесь? А до меня никто до этог н едодумался? Например Total Commander?
CeleronОракул (55904) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Скопировать все целиком, а файлы потом стереть.
CeleronОракул (55904) 13 лет назад

А у меня там инвы на 15 Гб. И места свободного столько нет. и времени на такое копирование кучи мелких файлов. Это минут 30 займет.

CeleronОракул (55904) 13 лет назад
Всем спасибо я сам нашел, эта функция есть в Total Commander
Есть такая прога — Indexator — называетя, бесплатная поиши.
Создает хтмл-ку с деревом.
как функция называется в тотале?
Сергей ДмитриевЗнаток (258) 1 год назад

F5 + |*.*

Копирование структуры папок без содержимого с помощью PowerShell

После приобретения нашей компанией сетевого хранилища для резервного копирования, встал вопрос о создании структуры папок, аналогично той, что уже использовались на другом хранилище. Казалось бы все просто, берем копируем и готово. Но к сожалению, вся эта структура занимает сотни гигабайт и просто копировать ее ради создания аналогичного дерева папок не совсем разумно. Кроме того, нет никакого смысла копировать туда содержимое этих папок. Создавать вручную данную структуру нереально, она достаточно витиевата и похоже уже на дерево с огромным количеством ветвей, созданную в течении длительного времени.

Постоянно работая с Powershell, я решил, что с его помощью легко смогу решить данную задачу. Первое что мне пришло в голову это вот такой код:

Copy-Item $source -Destination $destination -Recurse -Exclude *.*

но увы, как я выяснил, оказалось что при использовании параметра -Recurse, параметр -Exclude *.* не работает, он работает только без него.
И при выполнении данного кода копировалось все, включая содержимое всех папок. Я перепробовал еще несколько вариантов, но по прежнему желаемого результат не удалось добиться. Я начал искать решение в интернете, но ничего не нашел, были лишь альтернативные варианты решения при помощи сторонних утилит. Мне стало принципиально интересно решить данную задачу с помощью PowerShell.
Сначала я получал все папки, которые мне нужно было перенести на новое хранилище вот такой строкой:

$folders = Get-ChildItem $path -Recurse | ?

переменная $folders содержит все мне необходимые папки, но она не содержит их структуры и при выполнение например такого кода:

$folders | Copy-Item $source -Destination $destination -Recurse

копируется опять же все содержимое вместе с файлами. А если делать так:

New-Item -ItemType directory $folders

то он создаст все папки в одной директории без сохранения структуры.
Я решил просмотреть свойства объектов моего массива $folders и нашел параметр FullName который содержал полный путь до папки, включая ее саму. Это не совсем то что нужно, так мне не нужно было копировать всю структуру с корня диска, а нужна была лишь ее часть. Например, FullName = ‘C:\dir1\dir2\dir3\dir4\. \dirN’ и мне нужна структура начиная скажем с папки 4 и все что лежит далее в ней, в этом случае FullName мне не подходит. Однако ничего не мешает нам выбрать из этого пути того что нам нужно путем разбора строки.
В результате у меня получился простенький скрипт:

$path = Get-ChildItem Z:\Backup\Dir1 -Recurse | ?
$dest = «C:\test\»
$parent = $path[0].Parent.Name
$path | foreach

$_.FullName -match «$parent.+»
New-Item -ItemType directory ($dest + $Matches[0])

>

Сначала он забирает все папки в переменную $path.
Переменная $dest содержит путь, куда мы хотим скопировать структуры.
Затем в переменную $parent я помещаю «родителя» моей структуры, в данном случае это папка Dir1.
Далее перебирая все элементы я выполняю разбор строки параметра FullName(его результат выглядит так: Dir1\. \. \. \… а далее вся структура папок).
И затем просто создаю заново эту структуру в нужном мне месте.

Как оказалось все просто.

P.S. Есть небольшие нюансы при разборе строки параметра FullName, например если имя нашего $parent дублируется где внутри пути, а именно если наша родительская папка вложена в какую-нибудь папку с аналогичным ей именем, то результат разбора строки может быть иным нежели мы ожидаем. Впрочем там просто нужно немного поработать с регулярными выражениями и получить нужный результат.

  • структуры папок
  • PowerShell

Команда 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.

Как скопировать папки без содержимого

Сообщения: 1485
Благодарности: 164

Конфигурация компьютера
Процессор: QuadCore Intel Core i7-3770K, 3733 MHz (37 x 101)
Материнская плата: Gigabyte GA-Z77X-UD5H
Память: 8153 МБ (DDR3-1600 DDR3 SDRAM)
HDD: OCZ-VERT EX3 SCSI Disk Device (111 ГБ), WDC WD10EADS-65L5B1 (1000 ГБ, SATA-II)
Видеокарта: NVIDIA GeForce GTX 460 1024M GIGABYTE GTX460 GV-N460OC-1GI
Звук: Realtek ALC899 @ Intel Panther Point PCH — High Definition Audio Controller [C-1]
Блок питания: 650W Chieftec CFT-650-14CS PFC Black
CD/DVD: HL-DT-ST DVD-RAM GH22NS30 ATA Device
Монитор: ViewSonic VA1912w Series 19″ , SAMSUNG Full HD 42″
ОС: Windows 7 максимальная x64
Индекс производительности Windows: 7.9

В папке c:\updat есть 4 папки.1,2,3,temp и множество файлов различного расширения.
Надо скопировать только папки 1,2,3 в папку f:\3
Как не копировать папку temp «смог», а вот файлы . исключить из копирования не могу(маску по названиям даже не пытался-слишком много).(ну лузер в батанике, чеж теперь )
использовал xcopy и robocopy. через for тоже запутался.
насколько могу судить . просто не могу «сделать» правильную маску.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *