Вопрос

Как бы вы написали это, имея в вашем распоряжении только пакетные файлы и VBScript в среде Windows?

find -name '*.ext' -exec cp --parents {} destination/ \;

Или , скажем так,:

  • Рекурсивно найдите в текущей папке некоторый шаблон имени файла (заканчивающийся расширением, называемым ext в приведенном выше примере),
  • Скопируйте каждый из этих файлов в папку назначения (где бы она ни находилась), сохранив древовидную структуру каталогов (или создав все отсутствующие промежуточные каталоги), как в текущей папке.
Это было полезно?

Решение

Это должно сработать:

for /r %%a in (*.cmd) do xcopy %%a C:\DESTINATION%%~pa

Обратите внимание , что DESTINATION следует никогда быть подкаталогом каталога, из которого вы пытаетесь скопировать, в противном случае for /r переходит в рекурсивный цикл копирования файлов, которые он уже скопировал, создавая все более и более длинные пути к каталогам (не спрашивайте меня, откуда я знаю).

Вы могли бы сделать его немного более надежным, используя xcopy /c (чтобы продолжить копирование, даже если возникнут ошибки).Возможно, вы также захотите взглянуть на xcopy /? чтобы посмотреть, есть ли там еще что-нибудь ценное (/q, /r, /o, и т.д.).

Другие советы

Редактировать: Виноват, я пропустил флаг --parents в команде cp...xcopy, как показано ниже, будет воссоздан только нисходящий путь, а не путь к каталогам "выше" текущего каталога.

Я [сейчас] верить xcopy ( копия ) бы [не] сделай свое дело [в одиночку.Но творит чудеса с трюком Гранта Вагнера "for /r"].

xcopy [some_path]*.ext [some_otherpath]\final_directory /E  

 (or /S, above, if you don't want empty directories)
 the elements within brackets, some_path and some_otherpath are optional
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top