Tengo un montón de carpetas dentro de las carpetas. Me gusta esto
Root Folder
-- Folder 1
-- Folder 2
-- Folder 3
-- Folder 4
Quiero contraer todas las carpetas para que todos los archivos en la carpeta 1, carpeta 2, carpeta 3, ... carpeta n existan en la carpeta raíz.
¿Cuál es la forma más rápida de hacer esto en Windows?
Respuestas:
No hay razón para usar herramientas especiales o incluso secuencias de comandos. Solo usa la función de búsqueda en Explorer.
*
y presiona Enter.Si prefiere tener un script para poder iniciarlo y olvidarlo, también puede hacerlo. El comando para reemplazar
mv *\* .
es bastante fácil (for /r %f in (*.*) do @move "%~f" .
) pero estoy seguro de que le gustaría manejar duplicados, sin dejarlos atrás como en la respuesta de @Nicole Hamilton. Agregar un número al nombre de archivo de duplicados es probablemente la forma más fácil de hacerlo.Copie y pegue el siguiente archivo por lotes en el Bloc de notas y guárdelo como "flatten.cmd" (incluidas las comillas):
Para usar el script, simplemente arrastre la carpeta que desea aplanar encima.
fuente
Puede aplanar en el Explorador de Windows navegando a la carpeta que desea aplanar y buscando
System.Kind:<>folder
excluir carpetas de los resultados.Luego puede seleccionar todos los archivos con CTRL + A y copiarlos y pegarlos en una nueva carpeta. Tenga en cuenta que el Explorador de Windows le preguntará cómo tratar con nombres de archivos duplicados.
fuente
System.Kind:<>cartella
)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.
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:
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:t
operador es el operador de cola . El-e
operador es el archivo existe prueba .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.
fuente
bash
,mv */* .
funciona para mí.