Скопируйте все вложенные папки с указанным именем в объединенную папку, используя .bat - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы скопировать все подпапки (включая содержимое этих папок) с именем «ФАЗА 1» и объединить их содержимое в другом месте.

Файлы примеров в моем текущем каталоге:

Folder 1\PHASE 1\test1.pdf
Folder 2\PHASE 1\test2.pdf
Folder 3\PHASE 1\test3.pdf

Я бы хотел, чтобы они были скопированы в один каталог, например:

MASTER FOLDER\PHASE 1
>test1.pdf
>test2.pdf
>test3.pdf

Я хотел бы создатьцикл, чтобы повторить этот процесс для ФАЗЫ 2, ФАЗЫ 3 и т. д.

Это все, что я пытался безуспешно:

for /r "%cd%" %%x in ("PHASE 1") do copy /y "%%x" ""%cd%"\MASTER FOLDER"

1 Ответ

0 голосов
/ 19 декабря 2018
for /f "delims=" %%A in ('dir /a:d /b /s "PHASE *"') do (
    xcopy /y "%%~A" "MASTER FOLDER\%%~nxA\"
)

Посмотрите на for /?, и вы увидите:

(набор) Указывает набор из одного или нескольких файлов.Можно использовать подстановочные знаки.

PHASE 1 - это имя папки, которое, по-видимому, является недопустимым значением для (set).

Вместо for /r, for /f с использованиемКоманда dir может получить пути к каталогам, которые соответствуют шаблону с подстановочными знаками.

Приведенный выше код использует dir для получения каталогов с /a:d, рекурсивно с /s и возвращает в голом формате с /b.

Параметр for /f delims= обеспечивает возврат каждого пути без разбиения на токены.

xcopy копирует каждый соответствующий путь к каталогу в каталог MASTER FOLDER.

Если вам необходимо убедиться, что подстановочный знак шаблона PHASE * совпадает с цифрами, тогда dir можно передать в findstr для фильтрации возвращаемых путей.

...