Как скопировать структуру каталогов, но включить только определенные файлы (используя пакетные файлы Windows) - PullRequest
91 голосов
/ 23 января 2009

Как видно из названия, как я могу рекурсивно копировать структуру каталогов, но включать только некоторые файлы. Например, с учетом следующей структуры каталогов:

folder1
  folder2
    folder3
      data.zip
      info.txt
      abc.xyz
    folder4
    folder5
      data.zip
      somefile.exe
      someotherfile.dll

Файлы data.zip и info.txt могут появляться везде в структуре каталогов. Как я могу скопировать всю структуру каталогов, но включить только файлы с именами data.zip и info.txt (все остальные файлы следует игнорировать)?

Полученная структура каталогов должна выглядеть следующим образом:

copy_of_folder1
  folder2
    folder3
      data.zip
      info.txt
    folder4
    folder5
      data.zip

Ответы [ 15 ]

1 голос
/ 14 февраля 2014

Для тех, кто использует Altap Salamander (файловый менеджер на 2 панели): во всплывающем окне «Параметры копирования» просто укажите имена файлов или маски. Легко.

1 голос
/ 23 января 2009
XCOPY /S folder1\data.zip copy_of_folder1  
XCOPY /S folder1\info.txt copy_of_folder1

РЕДАКТИРОВАТЬ: Если вы хотите сохранить пустые папки (которые, при перечитывании вашего поста, вы, кажется,) использовать / E вместо /S.

0 голосов
/ 01 марта 2018

Чтобы скопировать все текстовые файлы в G: и сохранить структуру каталогов:

xcopy *.txt /s G:
0 голосов
/ 23 февраля 2015

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

  1. Создайте свой список исходных файлов с полными путями, включая букву диска, если nec, в текстовом файле.
  2. Включите регулярные выражения в текстовом редакторе.
  3. Добавьте двойные кавычки вокруг каждой строки в случае пробелов - ищите строку (.*) заменяйте строку "\1" и нажимайте заменять все
  4. Создать две строки для файла - одну для создания каталога, одну для копирования файла (qqq будет заменен на путь назначения) - строка поиска (.*) заменить строку md qqq\1\nxcopy \1 qqq\1\n и щелкнуть заменить все
  5. Удалить имя файла из путей назначения - поиск \\([^\\^"]+)"\n заменить \\"\n
  6. Заменить в пути назначения (в этом примере A:\src и B:\dest). Выключите регулярные выражения, выполните поиск qqq"A:\src\ replace B:\dest\ и нажмите replace all.

md создаст вложенные каталоги. copy, вероятно, будет вести себя идентично 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.

0 голосов
/ 10 сентября 2011

Для этого с помощью перетаскивания используйте winzip, есть опция сохранения структуры dir. Просто создайте новый .zip на уровне каталога, который будет вашим корнем, и перетащите файлы в него.

...