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:
- hacer
J:\> dir /s /b /ad >DirsToRemove.bat
para listartodoDIRS en J: (unidad actual) en el archivo DirsToRemove.bat. - Edite ese archivo,
el Bloc de notas funciona (no el Wordpad), pero es preferible un editor de texto más avanzado. - En cada línea que agregue
rmdir /s /q
antes 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. - Recuerde QUITAR las líneas que tienen directorios que desea MANTENER.
- Guarda, entonces...
- hacer
J:\> .\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.