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, umcmd
separado é 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.