vez varios una todos temporales renombrar renamer otro nombre mover masivamente lote los eliminar directorio diferente crear consola con como carpeta borrar archivos ala advanced dos

dos - varios - renombrar archivos en lote



¿Cómo puedo eliminar todos los archivos/subdirectorios excepto algunos archivos en DOS? (3)

Corregido en base al comentario de @Ken:

>d: >mkdir bats >c: >copy *.bat d:/bats >del *.* / Y >copy d:/bats/*.bat c:/

Estoy buscando una secuencia de comandos DOS para eliminar todos los archivos y subdirectorios en un directorio raíz a excepción de un conjunto de archivos por lotes (* .bat) que están en el directorio raíz. ¿Hay algún deportista de DOS que conozca una manera fácil de hacer esto?

Actualizar

Gracias por su ayuda a todos. Aquí es donde estoy ahora (ver abajo). Estoy usando la sugerencia de Ken para eliminar los archivos. Me gustaría saber cómo puedo detener la ejecución de este script si los comandos del o RD fallan debido a un bloqueo en un archivo / directorio. Alguien sabe como? En este momento, este script hará muchas cosas después de las eliminaciones y me gustaría detener el script si cualquiera de las eliminaciones falla.

@echo off REM ********************************************************************* REM * Delete all files and subdirs except for batch files in the root * REM ********************************************************************* REM Delete all files in current dir except bat files. Does this by a) setting the attributes of *.bat files to REM readonly and hidden, b) deleting the rest, c) reseting the attributes attrib +r +s *.bat del *.* /S /Q attrib -r -s *.bat REM Deletes ALL subdirectories FOR /D %%G in (*) DO RD /s /q %%G


Esto se basa en el método de Alex de realizar copias de seguridad de los archivos .BAT, pero también elimina todas las subcarpetas, utilizando el comando RD.

@echo off rem !WARNING! rem THE_DELETE_DRIVE is the drive to delete rem THE_BACKUP_DRIVE is the drive to use for backup set THE_DELETE_DRIVE=T: set THE_BACKUP_DRIVE=C: rem !WARNING! echo This will recursively delete everything from %THE_DELETE_DRIVE%/ (except batch files). echo Are you sure? Press Ctrl+C to cancel, or any other key to continue... echo. pause rem Make the backup folder md %THE_BACKUP_DRIVE%/bak12345 rem Copy all batch files from delete-drive root to backup folder copy %THE_DELETE_DRIVE%/*.bat %THE_BACKUP_DRIVE%/bak12345 rem Delete everything in the delete-drive root rd /s/q %THE_DELETE_DRIVE%/ rem Copy all backed-up files back to delete-drive root copy %THE_BACKUP_DRIVE%/bak12345/*.bat %THE_DELETE_DRIVE%/ rem Remove the backup folder rd /s/q %THE_BACKUP_DRIVE%/bak12345 echo ************************************ echo All Done! echo ************************************ echo. pause


Puede establecer primero los atributos de los archivos que desea que sean de solo lectura y ocultos, eliminar el resto y restablecer los atributos de los archivos ocultos de solo lectura.

attrib +r +s *.bat del *.* attrib -r -s *.bat

Solía ​​hacer eso con bastante frecuencia, y escribí un archivo por lotes que automatizaba esto:

@echo off @ if "%1" == "%9" goto help @ if /i %1 EQU ? goto help @ if /i %1 EQU help goto help @ attrib +h +s %1 @ %2 %3 /Q @ attrib -h -s %1 @ goto :EOF :help @echo ╔═══════════════════════════════════════════════════════╗ @echo ║ except filespec1 doscommand filespec2 ║ @echo ║ ║ @echo ║ filespec1 The files to exclude from doscommand ║ @echo ║ doscommmand The DOS command to execute on filespec2 ║ @echo ║ filespec2 The files to execute doscommand against ║ @echo ║ ║ @echo ║ Example: ║ @echo ║ ║ @echo ║ except *.txt del *.* ║ @echo ║ ║ @echo ║Deletes all files except text files in the directory ║ @echo ╚═══════════════════════════════════════════════════════╝

Probablemente esté bien solo usar el atributo oculto, pero sé que del no toca los archivos ocultos del sistema, así que configuré ambos. Mejor prevenir que lamentar, IMO.

Basado en un comentario de Marcus: si desea extender esto para incluir subdirectorios del directorio actual, simplemente cambie ambas líneas attrib a

attrib <remainder of line> /S

y cambie la línea entre las dos líneas attrib a

@ %2 %3 /Q /S

Eso debería funcionar para la mayoría de las cosas que querrías except.bat para hacer.