Во-первых, я знаю, что есть множество подобных вопросов, и я знаю, потому что я, должно быть, пытался адаптировать по крайней мере 5 из них, но я все еще здесь спрашиваю, потому что мое дерьмовое понимание CMD (которое я действительно думал, что я получал хорошие вплоть до этого момента) расстраивает меня общими, бесполезными ошибками, и я не могу понять, какая часть синтаксиса неверна. Вероятно, это связано с тем, что другие вопросы касаются структур папок / имен файлов соответствующих OP, и когда я пытаюсь адаптировать код к своей структуре папок / файлов, он отказывается работать. Поэтому я здесь прошу CMD for решения петли, которое фактически будет работать для моей собственной структуры файлов и папок.

У меня есть родительская папка, которая содержит много других папок, в которых есть файлы:

Parent Folder
     Subfolder
           File1
           File2
     Subfolder
           File1
           File2
     Subfolder
           File1
           File2

...и так далее.

Я хочу использовать CMD for цикла в сочетании с командой move чтобы извлечь все файлы из подпапок в родительскую папку, оставив каждую подпапку пустой.

Когда вы предоставляете CMD for цикла, пожалуйста, разбивайте то, что делает каждая часть команды, так как это поможет убедиться, что я понимаю код и, надеюсь, минимизировать проблемы, которые у меня возникают, чтобы он работал на себя.

1 ответ1

2

Хорошо, я наконец понял это, адаптировав код из еще одного вопроса. Спасибо @AFH за разъяснение частей, в которых я не был уверен в комментариях к этому ответу, и за его общую помощь с этим - это очень ценится.

Извлечь все файлы из подпапок в родительскую папку

for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER"

Не забудьте заменить все экземпляры PARENTFOLDER на путь к папке, в которую вы хотите извлечь файлы.

Извлечь все файлы из подпапок и удалить пустые подпапки

Маловероятно, что вам нужно будет оставить пустые подпапки после извлечения файлов из них - я, конечно, этого не сделал - поэтому приведенная ниже команда также автоматизирует их удаление.

for /r "PARENTFOLDER" %d in (*.*) do move "%d" "PARENTFOLDER" && cd "PARENTFOLDER" && for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

Еще раз замените все экземпляры PARENTFOLDER на путь к папке, в которую вы хотите извлечь файлы.

К этому моменту, однако, он больше не является однострочным и начинает немного запутываться при вставке в командную строку, поэтому проще всего поместить все это в пакетный файл. Использование переменных для пути к родительской папке позволяет вам заменить только один экземпляр PARENTFOLDER в начале файла, а также является более безопасной опцией, предотвращающей случайное удаление пустых папок, которые вы, возможно, захотите сохранить.

Пакетный файл

Вставьте в текстовый файл, замените PARENTFOLDER на путь к папке, с которой вы хотите работать, и сохраните ее с расширением .bat . Запустить в любом каталоге.

@ECHO OFF
SETLOCAL
SET parent="PARENTFOLDER"
CD /d %parent% 
FOR /r %parent% %%d IN (*.*) DO MOVE "%%d" %parent% 
FOR /f "delims=" %%d IN ('DIR /a:d /s /b ^| SORT /r') DO RD "%%d"
ECHO Done. Press any key to terminate script.
PAUSE >NUL

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