Прежде всего, если возможно, я предлагаю вам сделать резервную копию всего дерева каталогов на случай, если что-то пойдет не так. Затем попробуйте ввести команду
for /d %d in (*) do @echo move %d\%d\* %d
Это должно вывести что-то вроде
move folder1\folder1\* folder1
move folder2\folder2\* folder2
move folder3\folder3\* folder3
Если это похоже на правдоподобную последовательность команд, пропустите echo
:
for /d %d in (*) do @move %d\%d\* %d
Это выдаст сообщение об ошибке для folder1
, так как folder1\folder1
не существует. Он также выдаст сообщение об ошибке для любой папки, в которой папка второго уровня пуста.
Если вы хотите подавить сообщения об ошибках для папок, в которых папка второго уровня не существует, поместите следующее в пакетный файл:
@echo off
for /d %%d in (*) do (
if exist %%d\%%d\nul (
echo move %%d\%%d\* %%d
) else (
echo %%d\%%d doesn't exist.
)
)
или просто
@echo off
for /d %%d in (*) do if exist %%d\%%d\nul echo move %%d\%%d\* %%d
(Обратите внимание, что вы должны использовать %%
в пакетном файле, где вы используете %
непосредственно в командной строке.)
Очевидно, что существует риск, что у вас будут файлы с одинаковыми именами в каталоге и его подкаталоге, например, folder2\shopping.lst
и folder2\folder2\shopping.lst
.
В моем быстром тестировании в неважном дереве каталогов он спросил, хочу ли я перезаписать (т. Е. Перехватить) целевой файл (верхнего уровня).
Как я уже сказал, я советую сначала сделать резервные копии своих файлов, чтобы быть в безопасности.