¿Cómo muevo cada archivo en un árbol a la raíz del árbol?

10

Tengo una carpeta (llamémosla A) con muchas subcarpetas B, C, D, E, que nuevamente tienen subcarpetas B1, B2, B3, ... C1, C2, C3 ...

¿Cómo puedo usar cmd para mover todos los archivos de todas las subcarpetas a la carpeta "raíz" A?

Torre
fuente
¿Supongo que quiere todos los archivos en una raíz, no en subcarpetas? Entonces, ¿A \ File1, A \ File2, no A \ Folder2 \ File1?
Canadian Luke
@Luke - Sí, lo tienes. Cada archivo que existe en las carpetas y subcarpetas se movió a la raíz.
Torre

Respuestas:

12

Mi publicación original no incluyó la extensión del archivo en el comando mover. %~nisolo devuelve el nombre base, ¡debe usarlo %~nxipara obtener el nombre de archivo y la extensión! ¡Espero que no haya maltratado sus nombres de archivo en mi cuenta!

Desde un símbolo del sistema:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Si necesita limpiar las carpetas vacías después:

for /d %i in (*) do @rd /s /q "%i"

Ahora, si tiene algún conflicto de nombre de archivo, está solo. Puede agregar el /yparámetro al movecomando (antes del "%i") para forzar sobrescrituras. Si quieres algo diferente, necesitarás otro programa que pueda renombrar automáticamente todo por ti.

Además, si desea utilizar esto en un archivo por lotes, cambie todo %a %%.

afrazier
fuente
No sabía sobre FOR /r- ¡bien!
Daniel Beck
Wow, muy asombroso. Me inclino ante tu comando-fu.
Mokubai
2

Cree una carpeta y copie todas las demás carpetas en ella, luego haga clic derecho en esa carpeta y seleccione Buscar . En el cuadro de búsqueda ingrese *.*.

Esto enumerará todos los archivos y carpetas. Seleccione todos los archivos que desee en su directorio raíz y córtelos. Navegue a su directorio raíz y pegue todos los archivos allí.

Ricardo
fuente
la búsqueda no existe como comando en mi cmd.
Torre
Richard no estaba hablando de un comando. Han editado su respuesta para hacerlo más claro.
Isaac Rabinovitch el
0

Instale Cygwin (u otro entorno Unix para Windows) y ejecute lo siguiente:

cd A
find . -type f -exec mv {} . \;
Daniel Beck
fuente
Dependiendo de su mvy sus findvariantes, es posible que deba usarlo find . -type f -exec mv -t . {} \;.
Daniel Beck
1
Para los puertos nativos de Windows de muchas herramientas de Unix, me gusta unxutils.sourceforge.net
Dennis
@Dennis UnxUtils son agradables, desafortunadamente bastante viejos por ahora. Si los está usando en este momento, ¿podría verificar que mi publicación funciona con ellos? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 cy touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccpara la preparación.
Daniel Beck
-1 Eso puede ser cierto, pero estaba preguntando cómo hacerlo en cmd.
Torre
@Daniel Sin duda son viejos, los he estado arrastrando por años. Acabo de intentarlo find . -type f -exec mv {} . ;y parecía funcionar bien.
Dennis