Esse tipo de coisa é fácil com um shell Unix. Aqui está o que você poderia fazer com meu próprio shell Hamilton C (incluindo a versão gratuita ). Você poderia fazer algo muito semelhante com o Cygwin bash.
mv *\* .
Se o seu diretório é realmente grande, é possível que o curinga tenha ocorrido em uma linha de comando muito longa para o Windows passar para um processo filho. (A chamada do Windows CreateProcess limita a lista de argumentos a 32K caracteres Unicode.) Mas o shell C não tem limite internamente, portanto, você poderia iterar pela lista inteira dessa maneira:
foreach i ( *\* )
mv $i .
end
Para o ponto de @ MarkAllen acima, este tipo de pressupõe que não há nomes duplicados. Se houver, as cópias posteriores na lista substituirão as mais antigas. Se isso é uma preocupação, você pode iterar sobre os arquivos, mvusando-os somente se não estiver sobrescrevendo. O :toperador é o operador de cauda . O -eoperador é o arquivo existe teste .
foreach i ( *\* )
if ( -e $i:t ) then
echo -2 $i not moved because it already exists
else
mv $i .
end
end
Isso ainda deixa os diretórios vazios, o que talvez você não queira depois que eles forem esvaziados. Essa poderia ser a próxima iteração se isso importasse.