Вот решение вашего первого вопроса, насколько я понимаю:
@echo off
setlocal
set root=Folder1
for /f "delims=" %%f in ('dir /ad /b /s %root%') do @move "%%f\*.*" %root%
endlocal
Как я уже писал, все файлы на любом уровне перемещаются. Если вы хотите переместить только файлы подкаталогов первого уровня, избавьтесь от /s.
Для вашей второй проблемы попробуйте аналогичный подход, но с
dir /a-d /b
для вывода списка всех записей, которые не являются подкаталогами (например, пропустить JPEG). Это позволит вам создать оператор for , который выполняет удаление, а затем выполнить другой оператор, который выполняет перемещение и переименование.
Возможно, вы захотите взглянуть на вызов подпрограммы для перемещения, переименования, удаления. Затем вы можете манипулировать именем файла, чтобы изменить имя. Я немного запутался в том, что именно вы хотите сделать во втором случае. Также посмотрите справку по командам set и call , если вы не уверены в извлечении имени файла и других манипуляциях со строками.
Если вы добавите комментарии или отредактируете свой вопрос, чтобы показать, что именно вы хотите, тогда я буду рад помочь вам в дальнейшем.