"cp --parents" в командном файле / VBScript - PullRequest
0 голосов
/ 17 сентября 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 сентября 2009

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

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

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

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

0 голосов
/ 17 сентября 2009

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

Я [ сейчас ] верю, что xcopy [ не ] сделает трюк [в одиночку. Но творит чудеса с трюком Гранта Вагнера "для / р"].

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
...