Archivo por lotes. Eliminar todos los archivos y carpetas en un directorio

135

Quiero tener un archivo por lotes que eliminará todas las carpetas y archivos en mi carpeta de caché para mi kit de herramientas inalámbricas.

Actualmente tengo lo siguiente:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Esto eliminará todos los archivos .db en mi directorio RMS , sin embargo, quiero eliminar cada cosa de este directorio. ¿Cómo puedo hacer esto?

usuario69514
fuente
3
Escriba del /?en el indicador. Le dará información sobre cómo usar la herramienta. ¡Para este caso, del *.* /sfuncionaría pero no lo haga en el directorio incorrecto!
Michael Todd
35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir
Sugeriría por los votos para cambiar la respuesta correcta
GregM
55
La respuesta de forsvarir elimina también el RMSdirectorio, que puede no ser lo que se pretendía. (De hecho, a menudo es lo que no quiero, porque luego pierdo la marca de tiempo original del directorio y los permisos que tenía). Vea mi respuesta sobre cómo eliminar todos los contenidos de un directorio pero dejar el directorio en sí mismo. sitio.
Bill_Stewart

Respuestas:

51

del *.*en lugar de del *.db. Eso eliminará todo.

Jon Martin
fuente
56
Nota: Si desea omitir el mensaje "¿Está seguro de que desea eliminar ...", deberá agregar indicadores / FQ:del . /F /Q
Rhyuk
41
esto solo elimina archivos, no carpetas
icc97
52
Esto no debe marcarse como la respuesta correcta porque no elimina carpetas (como se indica en la pregunta).
Bill_Stewart
158

Utilizar:

  • Crear un archivo por lotes

  • Copie el texto a continuación en el archivo por lotes

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Eliminará todos los archivos y carpetas.

GregM
fuente
44
Impresionante, estaba buscando algo para limpiar archivos y carpetas para un trabajo por lotes mensual y esto funcionó.
Dave Harding
9
Asegúrese de que el directorio existe antes de hacer esto.
Bill_Stewart
2
Si tiene caracteres 'especiales' en sus nombres de archivo, primero chcp 10000cambie la codificación a UTF-16
Demelziraptor
3
Solo quiero agregar una nota al comentario de Bill_Stewart. La razón por la que desea asegurarse de que el directorio existe es que, de lo contrario, borrará el directorio en el que se encuentre actualmente. En mi caso, fue el archivo por lotes en el que había estado trabajando durante más de 30 minutos. :( Lo bueno es que el resto de la carpeta estaba bajo control de origen.
helios456
2
@vee cambie el ciclo a (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) para suprimir los mensajes de error y eliminación
Carl Walsh
34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Esto eliminará todo de la carpeta (y la carpeta misma).

infojolt
fuente
13
Creo que la pregunta es sobre vaciar el directorio de todo el contenido, pero no eliminar el directorio en sí.
Bill_Stewart
16

del *.*solo eliminará archivos, pero no subdirectorios. Para destruir el contenido de un directorio, puede usar este script:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

Los pushdcambios en el directorio del que desea eliminar los elementos secundarios. Luego, cuando se rdle pide que elimine el directorio actual y todos los subdirectorios, la eliminación de los subdirectorios se realiza correctamente, pero la eliminación del directorio actual falla, porque estamos en él. Esto produce un error que se 2> NULtraga. (2 es la secuencia de error).

Bill_Stewart
fuente
66
Me pregunté exactamente cómo funcionó esto por un momento, así como una explicación para los demás: el pushd cambia al directorio del que desea eliminar a los hijos. Luego, cuando rd solicita eliminar el directorio actual y todos los subdirectorios, la eliminación de los subdirectorios se realiza correctamente, pero la eliminación del directorio actual falla, porque estamos en él. Esto produce un error que 2> NUL traga. (2 es la secuencia de error). Muy astuto Sr. Stewart!
Cinética
Ah, y "setlocal enableextensions" activa la capacidad de empujar simultáneamente el directorio actual en la pila y cambiar el directorio. Esto solo parece ser requerido antes de XP, ya que allí y más tarde se establece de forma predeterminada en Encendido de todos modos.
Cinética
¿Puedes integrar la información de los comentarios en la respuesta (los comentarios pueden desaparecer en cualquier momento)? ( Sin usar las etiquetas "Editar:" "Actualizar:" .)
Peter Mortensen
12

Acabo de armar esto de lo que morty346 publicó:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Agrega una comprobación rápida de que la carpeta definida en la variable existe primero, cambia el directorio a la carpeta y elimina el contenido.

Fantus_Longhorn
fuente
2
Por lo tanto, consejo rápido: si intenta ejecutar esto en una ruta de red, incluso con la instrucción "IF EXIST", no se podrá establecer la carpeta y se registrará una instrucción en el indicador de cmd "Las rutas UNC no son compatibles, por defecto directorio de Windows ", entonces intentará eliminar todo en su directorio de Windows. Así que ten cuidado.
CBRF23
11

Puede hacer esto usando dely el /Sindicador (para indicarle que repita todos los archivos de todos los subdirectorios):

del /S C:\Path\to\directory\*

El comando RD también se puede utilizar. Elimine recursivamente en silencio sin un aviso:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

PodTech.io
fuente
5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)
Cristian Tetic
fuente
3

Intenta lo siguiente; esto funciona para mi.

Tengo una aplicación que descarga datos en mi carpeta "C: \ tmp", y lo siguiente funciona mejor para mí. Ni siquiera pide o No para eliminar los datos. He hecho un cronograma para que se ejecute cada 5 minutos.

cd "C:\tmp"

del *.* /Q
pobre
fuente
77
Si la carpeta "C: \ tmp" no está presente (si usted o alguna otra aplicación ha eliminado esa carpeta) y si intenta ejecutar esta, ¿no eliminará los datos de otra carpeta dentro de "C: \"? (Sucedió conmigo)
Vikram
44
Como señala Vikram: 1) Esto es muy peligroso y 2) no elimina los subdirectorios como se indica en la pregunta.
Bill_Stewart
2
Además de lo de las carpetas ... puedes hacer del /q c:\tmp\*.*, que es aproximadamente un millón de veces más seguro. Sin mencionar cdque solo cambiará la ruta, no la unidad.
Nyerguds
1
Este es un consejo terrible. Como otros han mencionado, puede terminar purgando tantos datos esenciales como resultado de esto. Marcado para su eliminación, creo que es tan malo.
RyanfaeScotland
2

Mejor aún, digamos que quiero eliminar todo lo que está debajo de la C:\windows\tempcarpeta.

@echo off
rd C:\windows\temp /s /q
usuario3788752
fuente
11
Eso elimina el directorio c:\windows\temp. No creo que esa fuera la pregunta original.
Bill_Stewart
Eliminar el directorio me parece más fácil y si necesito volver a crearlo después, puedo hacerlo. Un problema podría ser la pérdida de permisos de carpetas especiales. Sin embargo, esto parece mucho más fácil que la mayoría de las otras respuestas.
madannes 03 de
1
Lamentablemente, eliminar y volver a crear inmediatamente desde el script por lotes parece dar errores aleatorios de "acceso denegado", en Win10 ...
Nyerguds
2

Puede usar robocopy para reflejar una carpeta vacía en la carpeta que está borrando.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

También funciona si no puede eliminar o volver a crear la carpeta real.

Requiere un directorio vacío existente.

Aaron
fuente
1
Según la ayuda de robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).estoy bastante seguro de que /Ees redundante.
Nyerguds
2

Utilizar

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Esta versión se elimina sin preguntar:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Ejemplo:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Esto se aclarará C:\foo1\foo\foo\foo3.

(Me gustaría mencionar la respuesta de Abdullah Sabouin . Hubo una confusión acerca de que lo copiara . No noté su publicación. ¡Me gustaría agradecerle a Melpomene por señalar errores!)

TravieDude Minecraft y más
fuente
Eso no funciona en absoluto. rmdir fooerrores si foono es un directorio vacío.
melpomene
@melpomene ¡Encontré el error y debería corregirse!
TravieDude Minecraft y más
1
No quise copiar a @Abdullah Sabouni de ninguna manera. No debo haber notado esto. Lo siento.
TravieDude Minecraft y más
@melpomene Dije mi error y mi punto de vista de lo que sucedió. Pero he decidido no eliminar en caso de que ayude de alguna manera. Gracias por señalar eso.
TravieDude Minecraft y más
@TravieDudeMinecraftandMore +1 - también funcionó para mí.
Guy Avraham el
0

No puede eliminar todo con rmdiro delsolo:

  • rmdir /s /qno acepta parámetros comodín. Entonces lo rmdir /s /q *hará el error.
  • del /s /f /q eliminará todos los archivos, pero los subdirectorios vacíos permanecerán.

Mi solución preferida (como he usado en muchos otros archivos por lotes) es:

rmdir /s /q . 2>NUL
mosca
fuente
0

Solo una versión modificada de la respuesta de GregM :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
grenix
fuente
-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Estabas en el camino correcto. Simplemente agregue código para agregar la carpeta que se elimina nuevamente.

Abdullah Sabouni
fuente
1
No recomiendo esta solución porque elimina el directorio (perdiendo así sus permisos) y lo vuelve a crear (posiblemente con diferentes permisos).
Bill_Stewart
-3

Debe ejecutar este comando para eliminar todos los archivos:

del*.*
David Naranjo Hernández
fuente
66
igual que la respuesta aceptada del 26 de julio de 11 a las 21:04. No agregue una respuesta cuando no tenga algo nuevo.
Stephan
2
Además de la crítica válida de @Stephan, el comando debe ser del *.*(con un espacio)
Ty Hitzeman