¿Cómo puedo eliminar todos los archivos / subcarpetas en una carpeta dada a través del símbolo del sistema?

42

Me gustaría eliminar todos los archivos y subcarpetas en un archivo por lotes en Windows 7 y mantener la carpeta superior. Básicamente vaciar la carpeta. ¿Cuál es la instrucción de línea de comando para eso?

Tony_Henrich
fuente
3
No es una trampa, pero está buscando cómo hacer esto "desde el símbolo del sistema" no desde "DOS". No ha habido un subsistema DOS desde Win ME.
MDMarra
@MarkM: Bueno, hay / hubo ntvdmpero a medida que los sistemas de 64 bits ganan cuota de mercado, cada vez es más irrelevante.
Joey

Respuestas:

55

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

del /S C:\Path\to\directory\*
MDMarra
fuente
2
la tuya es mejor: D +1
Borré
3
Explicación: del significa Eliminar y S significa Recursivo.
Tamara Wijsman
3
@ Tony_Henrich, Obtenga más información sobre los comandos de msdos aquí. computerhope.com/msdos.htm
Moab
3
y usar / Q mantiene subcarpetas vacías, lo que no es deseable.
Tony_Henrich
3
Esta es la respuesta incorrecta y no sé por qué recibió tantos votos. ¡Parece que la gente no entendió la pregunta completamente y no leyó los comentarios! Revisaré las respuestas y seleccionaré la correcta.
Tony_Henrich
22

La mejor solución: por ejemplo, quiero eliminar todos los archivos y subdirectorios del directorio principal, digamos "C: \ Users \ Desktop \ New folder \". La manera fácil es crear un archivo por lotes de los siguientes tres comandos.

cd C: \ Users \ Desktop \ Nueva carpeta \

del * / S / Q

rmdir / S / Q "C: \ Users \ Desktop \ Nueva carpeta \"

Aquí primero limpiará todos los archivos en todos los subdirectorios y luego limpiará todos los subdirectorios vacíos. Dado que el directorio de trabajo actual es el directorio padre, es decir, "\ Nueva carpeta", el comando rmdir no puede eliminar este directorio en sí.

Annasaheb
fuente
1
Funciona muy bien, excepto por una advertencia cuando el sistema no puede eliminar la carpeta raíz.
Jerther
2
No está bien. Caminos codificados y al mirarlo, no vacía la carpeta. Se lo quita. Muy peligroso también. Elimina archivos en la carpeta actual si la ruta no sale o está mal escrita.
Tony_Henrich
1
Como @Tony_Henrich dijo que el rmdircomando eliminaráNew folder
Nuktu
No. Esto realmente funciona para borrar por completo la "Nueva carpeta" sin eliminar la carpeta en sí. El único problema es que da una advertencia menor cuando el sistema operativo no puede eliminar la carpeta principal. Además, el comando del es redundante a menos que tenga una carpeta grande, en cuyo caso podría ser más rápido. Puede modificarlo como tal (Perdón por la falta de saltos de línea en los comentarios): establezca FOLDER = "% userprofile% \ Desktop \ New folder" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke
3
Muy peligroso Si alguien continúa y elimina / renombra `C: \ Users \ Desktop \ New folder`, la primera línea con CD falla y su archivo por lotes elimina felizmente todo en el directorio actual (predeterminado). Que bien podría terminar siendo tu directorio de trabajo o C: \ Windows \ System32
Ishmaeel
9

Navegue al directorio principal:

pushd "Parent Directory"

Eliminar las subcarpetas:

rd /s /q . 2>nul
usuario340956
fuente
1
Wow, eso es hack :)
Tarnay Kálmán
1
Esto es esencialmente equivalente a dos respuestas anteriores.
Scott
De acuerdo con lo anterior: esta es una copia de las respuestas anteriores, reemplazada por comandos sinónimos de aquellos que están reemplazando. pushdno agrega nada aquí que cdya no esté haciendo.
Hashim
este es el único que pude usar hasta ahora que funcionó exactamente para lo que el autor de la pregunta pedía, todos los demás simplemente borraron todos los archivos. Por supuesto rmdir /s path-to-folder, eliminará la carpeta con todo lo que contiene, pero el autor de la pregunta quería saber cómo eliminar todo en el directorio de trabajo.
Katz_Katz_Katz
Esta respuesta funcionó mejor para mí. Con todas las otras respuestas, no eliminó los directorios no vacíos al usar / Q y siempre pidió confirmación cuando no usaba / Q.
marijnr
5
rmdir "c:\pathofyourdirectory" /q /s

No olvide utilizar las comillas y para /q /sello eliminará todos los repositorios y sin preguntar.

Superusuario
fuente
2
La pregunta era "Me gustaría eliminar todos los archivos y subcarpetas en un archivo por lotes en Windows 7 y mantener la carpeta superior " .
Werner Henze
5

puede usar rmdir para eliminar los archivos y la subcarpeta, de esta manera:

rmdir /s/q MyFolderPath

Sin embargo, es significativamente más rápido, especialmente cuando tiene muchas subcarpetas en su estructura para usar del antes del rmdir, así:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
Einbert Alshtein
fuente
La primera opción da un error "el directorio no está vacío". El primer comando en la segunda opción, elimina toda la carpeta. No lo mantiene como quería. El segundo comando no es necesario si el primer comando eliminó toda la carpeta.
Tony_Henrich
El rmdircomando (ambos son iguales) eliminará la carpeta principal. Esta no es una respuesta a la pregunta. ¿Por qué la gente no lee?
Hashim
3

Si desea eliminar todos los archivos en una carpeta, incluidas todas las subcarpetas y no confiar en algunas condiciones de error para mantener la carpeta raíz intacta (como vi en otra respuesta), podría tener un archivo por lotes como este:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

Y luego simplemente lo llamarías con:

empty_my_folder.bat "C:\whatever\is\my folder"
Gio
fuente
3

Puede hacerlo de manera rápida y sencilla al poner estas tres instrucciones en su archivo bat:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
sangre de fuego
fuente
Esto es inmensamente útil ya que también elimina cualquier archivo oculto o del sistema.
weaknespase
1

Esto funcionó mejor para mí cuando tenía espacios en los nombres de las carpetas.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)
Ed Hammond
fuente
La gente siempre se olvida de tener espacios en los nombres.
Kevin Panko
1

Para eliminar el archivo:

del PATH_TO_FILE

Para eliminar la carpeta con todos los archivos en ella:

rmdir /s /q PATH_TO_FOLDER

Eliminar todos los archivos de una carpeta específica (no eliminar la carpeta en sí) es un poco complicado. del /s *.*no puede eliminar carpetas, pero elimina archivos de todas las subcarpetas. Entonces se necesitan dos comandos:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Puede crear un script para eliminar lo que desee (carpeta o archivo) de esta manera mydel.bat:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

Pocos ejemplos de uso:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
Maxim Suslov
fuente
0

Esto es lo que funcionó para mí.

  1. Navegue dentro de la carpeta donde desea eliminar los archivos.
  2. Tipo: del *
  3. Y por si.
  4. Hecho
Erv
fuente