Eliminar subcarpetas excepto algunas de ellas

Tengo un directorio del que cuelgan algunos archivos y varios subdirectorios. Algo de este estilo:

Subdirectorio1

          archivos del subdirectorio1

SUBDIRECTORIO2

          archivos del subdirectorio2

SUBDIRECTORIO3

          archivos del subdirectorio3

...

Subdirectorio8

          archivos del subdirectorio8

ARCHIVO1

ARCHIVO2

ARCHIVO3

Lo que quisiera es programar un botón para que por una parte eliminara todos los subdirectorios (y archivos y subdirectorios que colgaran de ellos) excepto 3 (siempre van a ser los mismos los 3 que se mantengan) y por otra no eliminara ninguno de los archivos que no cuelgan de ningún subdirectorio.

Como es un poco complicado el explicarlo, la idea es que siguiendo con el ejemplo, cada vez que se pulsara el botón sólo se mantuvieran únicamente el SUBDIRECTORIO3 (y sus archivos), el SUBDIRECTORIO5 (y sus archivos) y el SUBDIRECTORIO 7 (y sus archivos), además de los archivos ARCHIVO1, ARCHIVO2 y ARCIVO3, eliminándose el resto de subdirectorios.

Los nombres de los subdirectorios a eliminar varían cada vez.

¿Podríais ayudarme y decirme si es posible?

Respuesta
1

Veo que le han dado una respuesta muy simple. Desarrollé esta herramienta para eliminar carpetas y archivos. Se requieren 2 tablas y 1 formulario 2 subformularios y 1 módulo de VBA.

Tablas

Las tablas están relacionadas por idcarpeta y con eliminación en cascada.

Formulario con los subformularios

Al hacer clic en el botón Seleccionar se abre el formularios para elegir la carpeta que contiene las subcarpetas.

NOTA: Cada vez que se abre este formularios se retiran los registros de las 2 tablas.

En el ejemplo elijo la carpeta CarpetaPrueba y obtengo:

Se va a retirar la carpeta D:\CarpetaPrueba\Adjuntos y los archivos D:\CarpetaPruebas\Actas\Oferta_1_Acta_2.docx  y D:\CarpetaPruebas\Actas\Oferta_1_Acta_2.PDF

Hago clic sobre el botón Retirar y se elimina la carpetas y los archivos. La herramienta pregunta si está seguro con este mensaje:

Al hacer clic sobre el botón Sí se retiran las carpetas y/o archivos, si todo fue correcto informa con un mensaje. Este es el resultado final.

Observe que no está la carpeta D:\CarpetaPrueba\Adjuntos  y los archivos dependientes de ésta, igualmente no están los archivos de la carpeta D:\CarpetaPruebas\Actas\Oferta_1_Acta_2.docx  y D:\CarpetaPruebas\Actas\Oferta_1_Acta_2.PDF.

No explico el código porque me extendería bastante, pero si le interesa la herramienta puede solicitarla a [email protected] favor anotar en el asunto la consulta.

Hola Eduardo.

Me podría servir pero entiendo que tu herramienta es aplicable a situaciones en que en cada momento hay que elegir qué directorios o archivos quieres eliminar. Yo pretendía algo más simple dado que en mi caso lo que pretendo es eliminar todo lo que cuelga de un directorio excepto 3 subdirectorios que siempre son los mismos y unos cuantos archivos que tambien siempre son los mismos.

Gracias.

Pero como al final de la pregunta dice "Los nombres de los subdirectorios a eliminar varían cada vez". En este caso si son constantes aún es más fácil, programe el botón con la instrucción RmDir() como le explicaron, aunque utilizo FileSystemObject. Algo como:

Por ejemplo, para eliminar la carpeta de D:\Prueba\Temporal llame la función desde cualquier parte así:

Call EliminarCarpeta("D:\Prueba\Temporal ")

Se preguntará ¿para qué la función si la instrucción RmDir() es más simple?. Es cierto, pero el modelo de objetos de FilesSystemObject para manipular carpetas, archivos y unidades es más moderno y contiene muchas posibiliades. RmDir() es una instrucción antigua que aún existe en VBA por compatibilidad.

No cometa el error de trabajar en el código con nombres constantes de las carpetas, que error, mi recomendación es que registre en una tabla el nombre de las carpetas que debe eliminar más o menos siguiendo el modelo que le propuse, la diferencia es que usted mismo va a ingresar el nombre completo de la carpeta a retirar e inclusive no es necesario marcarlas, toda vez, que solo va a grabar las que debe eliminar. Esto permite que si cambia el nombre o adiciona una carpeta NUNCA el código se desactualiza. Escríbame a [email protected] y le preparo el ejemplo específico.

Ya le envíe a su correo el ejemplo.

1 respuesta más de otro experto

Respuesta
1

Para eliminar directorios puedes usar

RmDir "C:\users\gonza\documents\subdirectorio1"

Para eliminar archivos puedes usar

Kill "c:\users\gonza\documents\subdirectorio2\cc7.jpg"

Lógicamente tienes que poner sus rutas. Lamentablemente, a partir de "Lo que quisiera..., no me ha quedado claro.

Por curiosidad, no serás de Puerto de Santa María.

Hola Julián.

Si, esas instrucciones las conozco, pero lo que pretendo es automatizar el proceso de eliminar todos los subdirectorios menos 3 que siempre son los mismos y los archivos que no cuelgan de ningún subdirectorio.

Y me temo que no soy del Puerto de Santa María.

Gracias.

Te lo preguntaba porque tengo un amigo allí y se llama precisamente Tomás Torres.

No sé como decides cual eliminar, quiero decir, si los escoges en algún sitio, si siempre son los mismo, por eso no puedo profundizar más. Si tengo, para no trabajar mucho sólo he puesto 6 Subdirectorios, que cada uno tiene sus archivos

En un formulario le he puesto un botón pero podría ser en cualquier otro evento

Y en sus propiedades-eventos-al hacer clic le pongo(aprovecho para poner la instrucción de borrar los archivos)

Private Sub Comando130_Click()
Dim i As Byte
For i = 1 To 6
Select Case i
Case 1, 2, 4, 6
Kill "C:\Users\gonza\Documents\Subdirectorio" & "" & i & "" & "\" & "*.*"
RmDir "C:\Users\gonza\Documents\Subdirectorio" & "" & i & ""
End Select
Next
End Sub

De forma, que cuando lo pulso, me lo deja como

Adiós al 1, 2, 4 y 6

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas