Exerion, Для начала, формат команды For неверен - кавычки неправильные. Сделайте For /? >C:\_For_Help.txt В файле посмотрИте, какие нужны. Дальше копать поленился.
По Вашему коду видно, что Вы хотите не скопировать (Copy) файлы, а переместить их (Move). Вот вариант решения (при совпадении имени файл перемещен не будет, батник выдаст ошибку)
Код:
@Echo Off
Set From=E:\Над крылечком
Set To=E:\Дым колечком
Set Mask=*.mp3
Md "%To%" >Nul 1>Nul 2>Nul
For /F "usebackq delims=" %%f In (`Dir "%From%\%Mask%" /A:-D /B /S`) Do Move "%%f" "%To%\"
Вот еще вариант, при большом кол-ве файлов внутри директорий он будет работать быстрее, за счёт того, что групповые операции выполняются быстрее. Опять же, дубликаты по именам перемещены не будут
Код:
@Echo Off
Set From=E:\Над крылечком
Set To=E:\Дым колечком
Set Mask=*.mp3
Md "%To%" >Nul 1>Nul 2>Nul
Move "%From%\%Mask%" "%To%\" >nul 1>Nul 2>Nul
For /F "usebackq delims=" %%f In (`Dir "%From%" /A:D /B /S`) Do Move "%%f\%Mask%" "%To%\" >nul 1>Nul 2>Nul