Как скопировать толкьо структуру папок, без файлов?
К примеру имеется папка, в ней есть под папки, и в каждой из подпапок есть еще папки, а в них лежат файлы.
Вот как мне скопировать все кроме файлов? Т.е мне нужны толкьо пустые папки и подпапки в той же структуре, что и были но без файлов.
Дополнен 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 тоже запутался.
насколько могу судить . просто не могу «сделать» правильную маску.