Eliminar todas las carpetas, excepto carpetas y subcarpetas específicas

Eliminar todas las carpetas, excepto carpetas y subcarpetas específicas

Tengo un SSD con varias particiones. Necesito trabajar en J:\ y necesito eliminar todo lo que hay dentro de J:, excepto las siguientes carpetas:

J:\System Volume Information
J:\$RECYCLE.BIN
J:\New
J:\Old Stuff

Y las siguientes subcarpetas:

J:\Papers\Folder
J:\Room\Main Documents
J:\Year\Origin\Part
J:\Year\Origin\Part Two

Después de buscar y leer mucho, escribí el siguiente código:

@ECHO OFF
SETLOCAL
SET "sourcedir=J:\"
SET "keepdir=System Volume Information"
SET "keepdir=$RECYCLE.BIN"
SET "keepdir=New"
SET "keepdir=Old Stuff"
SET "keepdir=Papers\Folder"
SET "keepdir=Room\Main Documents"
SET "keepdir=Year\Origin\Part"
SET "keepdir=Year\Origin\Part Two"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
GOTO :EOF

Desafortunadamente, el código anterior no funciona (borra todo dentro de J:).

Respuesta1

@echo off & cd /d J:\ || goto :eOf 

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do =;( type "%~f0" | 1>nul find /i "%%~fi" 
           );= || 1>nul 2>&1 rmdir /q /s "%%~fi"

goto :eof

:: Keep the list in the lines below the
:: full path of the folders that remained!

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

1.Utilice un lote con una lista de las carpetas que desea conservar:

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

2.Utilice un bucle para enumerar su árbol de carpetas

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do

3.Para cada carpeta en el bucle, use un tipo en el propio bat y verifique si la carpeta/ruta aparece allí:

type "%~f0" | 1>nul find /i "%%~fi"

4.Para los casos en los que la carpeta/ruta no se encuentre ( ||) en su baño, elimínela:

type ...  find .. || rmdir /q /s "%%~fi"

5.Terminando el ciclo, salga del archivo:

goto :eOf

Algunas lecturas adicionales:

Respuesta2

Sugerencia:

  1. hacer J:\> dir /s /b /ad >DirsToRemove.bat
    para listartodoDIRS en J: (unidad actual) en el archivo DirsToRemove.bat.
  2. Edite ese archivo,
    el Bloc de notas funciona (no el Wordpad), pero es preferible un editor de texto más avanzado.
  3. En cada línea que agregue rmdir /s /qantes del nombre del directorio,
    incluya el nombre entre "comillas si hay caracteres ESPACIADOS en el nombre;
    también está bien usar comillas en TODOS los nombres. =>rmdir /s /q "name"
    Un editor de texto más avanzado permite utilizar macros; Usar una macro puede ser tan fácil como comenzar a grabar, editar una línea, detener la grabación y luego usar una tecla de acceso directo para iniciar la macro tantas veces como desee.
  4. Recuerde QUITAR las líneas que tienen directorios que desea MANTENER.
  5. Guarda, entonces...
  6. hacerJ:\> .\DirsToRemove.bat

Cuando haya hecho cosas similares varias veces, normalmente le llevará sólo uno o dos minutos realizar la tarea que tiene entre manos.

información relacionada