Я включил приведенные ниже примеры, чтобы не использовать рекурсию, и использую RoboCopy
для перемещения. RoboCopy
имеет возможность объединять каталоги и перезаписывать / или иным образом (в зависимости от выбранных вами опций) , если будут какие-либо коллизии.
Если вы только движущиеся каталоги с указанным c именем, например, foo bar
, тогда может помочь следующая командная строка :
(PushD "folder"&&(For /D %G In (*)Do @For /D %H In ("%G\*") Do @RoboCopy "%H\foo bar" "%G\foo bar" /E /Move)&PopD)>NUL 2>&1
Если вы перемещаете все каталоги, независимо от их имена, от трех уровней ниже folder
вверх на один уровень, тогда, возможно, этого будет достаточно.
(PushD "folder"&&(For /D %G In (*)Do @For /D %H In ("%G\*") Do @For /D %I In ("%H\*")Do @RoboCopy "%I" "%G\%~nxI" /E /Move)&PopD)>NUL 2>&1
Пожалуйста, обратите внимание, что никакие проверки не были включены, чтобы определить, каталоги второго уровня, которые содержали ваши цели теперь пусты. Если они есть, и вы хотите sh удалить их, вам нужно будет расширить командные строки или добавить новые по мере необходимости.