Este tipo de cosas es fácil con un shell de Unix. Esto es lo que podría hacer con mi propio shell Hamilton C (incluida la versión gratuita ). Podría hacer algo muy similar con Cygwin bash.
mv *\* .
Si su directorio es realmente enorme, es posible que se convierta en comodín en una línea de comando demasiado larga para que Windows pase a un proceso secundario. (La llamada a Windows CreateProcess limita la lista de argumentos a 32K caracteres Unicode). Pero el shell C no tiene límite internamente, por lo que podría iterar sobre la lista completa de esta manera:
foreach i ( *\* )
mv $i .
end
Para el punto de @ MarkAllen anterior, este tipo de asume que no hay nombres duplicados. Si las hay, las copias posteriores de la lista sobrescribirán las anteriores. Si eso es un problema, puede iterar sobre los archivos, mv'solo si no está sobrescribiendo. El :toperador es el operador de cola . El -eoperador es el archivo existe prueba .
foreach i ( *\* )
if ( -e $i:t ) then
echo -2 $i not moved because it already exists
else
mv $i .
end
end
Esto todavía deja los directorios vacíos, que tal vez no desee después de que se hayan vaciado. Esa podría ser la próxima iteración si importara.