Você pode canalizar DIR / B através de FINDSTR para filtrar os arquivos indesejados. Você pode processar esses resultados usando FOR / F.
for /f "eol=: delims=" %F in ('dir /b /a-d source\*.avi^|findstr /lie .avi') do move "source\%F" dest
Estou usando o comando "move" com um padrão curinga no prompt do CMD no Windows 7.
No meu diretório de origem, eu tenho os seguintes arquivos:
movie1.avi
movie1.avi_metadata
movie2.avi
movie2.avi_metadata
Se eu digitar o comando move source\*.avi dest
, ele moverá todos os quatro arquivos, embora eu espere que ele mova apenas os dois arquivos *.avi
e não os arquivos *.avi_metadata
.
Como esperado, move source\*.a dest
e move source\*.av dest
não movem nenhum arquivo. No entanto, quando o comprimento da extensão do padrão curinga for de 3 caracteres, ele moverá todas as extensões que começam com esses três primeiros caracteres.
Este é um bug no comando "move" ou comportamento esperado e está documentado em algum lugar?
Editar: John Watts observa que isso provavelmente é feito para nomes de arquivo "curtos".
É possível, então, fazer com que comandos no interpretador CMD operem apenas em nomes de arquivos longos e ignorar nomes de arquivos curtos?
Você pode canalizar DIR / B através de FINDSTR para filtrar os arquivos indesejados. Você pode processar esses resultados usando FOR / F.
for /f "eol=: delims=" %F in ('dir /b /a-d source\*.avi^|findstr /lie .avi') do move "source\%F" dest
Tags command-line