Como o link de Scott discute, *.xml corresponde a *.xml_ , porque o nome 8.3 termina em .XML (use dir /x para mostrar).
Felizmente, o comando ForFiles não está sujeito a essa excentricidade, portanto você pode usar:
forfiles /m *.xml /c "cmd /c move @path TargetDir\"
Notas:
- Como
moveé um comando interno, umcmdseparado é necessário para invocá-lo (isso não seria necessário com um comando externo (comoxcopy), como emforfiles /m *.xml /c "xcopy @path TargetDir\"). -
Existe uma opção
/s, que será recursiva através de subdiretórios, mas não reciclará o diretório de destino: se você quiser que a árvore de origem seja correspondida no destino, será necessário analisar o caminho de origem para encontre o diretório de destino correto, que provavelmente é feito melhor em um arquivo de lote:forfiles /m *.xml /c "cmd /c call mover.cmd @relpath TargetDir\" -
Se você precisar de
mover.cmd, deixarei de escrevê-lo como um exercício de script para você. - Eu não testei o que acontece quando há espaços nos nomes de arquivos ou diretórios, mas esperaria complicações.