2

Задача:

Folder1>Subfolder1>Stuff1
Folder1>Subfolder2>Stuff2
...

Переместить содержимое подпапки в родительскую папку (Stuff1/2 - это подкаталоги, в которых есть другие файлы или подкаталоги)

Folder1>Subfolder1
Folder1>Subfolder2
Folder1>Stuff1
Folder1>Stuff2

Я старался:

for /d %f in (.\*) do (
pushd %f
move .\%f\* ..
popd
)

Но это не сработало.

2 ответа2

2

Вы не можете сделать move * .. для каталогов. Единственный способ move каталога - это указать само имя каталога (подстановочные знаки не допускаются). Так что вам нужен второй цикл (внутри первого), чтобы пройтись по каталогам:

@echo off
for /d %%d in ("*") do (
  for /d %%e in ("%%d\*") do (
    move "%%e" .
  )
)

Нет необходимости в pushd потому что вы можете переместить его из родительского в родительский.

примечание: это используется для пакетного файла, поэтому для %d % удваивается до %%d и %%e . Если вы запускаете его прямо из командной строки, вам нужен только один % .

Редактировать:
Если подпапки первого уровня (Subfolder1 и Subfolder2) также содержат файлы (помимо папок Stuff1 и Stuff2), вы можете добавить еще один шаг для внешнего.

@echo off
for /d %%d in ("*") do (
  for /d %%e in ("%%d\*") do (
    move "%%e" .
  )
  move "%%d\*" .
)
0

Попробуйте использовать xcopy в командной строке. Вы можете прочитать больше о xcopy здесь: Xcopy Xcopy имеет возможность копировать папки, подпапки и файлы одновременно. Вы можете написать небольшой пакетный файл для автоматизации процесса, если вы хотите использовать его более одного раза.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .