2010-08-09 16:42:36 +0000 2010-08-09 16:42:36 +0000
43
43

¿Cómo puedo borrar todos los archivos y subcarpetas de una carpeta determinada mediante el símbolo del sistema?

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

Respuestas (11)

54
54
54
2010-08-09 16:46:23 +0000

Puedes hacerlo usando del y la bandera /S (para decirle que elimine todos los archivos de todos los subdirectorios):

del /S C:\Path\to\directory\*
23
23
23
2013-10-05 04:44:01 +0000

La mejor solución: por ejemplo, quiero borrar todos los archivos y subdirectorios del directorio principal digamos “C:\N-Escritorio del usuario\N-nueva carpeta”. La manera fácil es crear un archivo por lotes de abajo de tres comandos.

cd C:\Users\Desktop\NNNNNNNNnueva carpeta\N

del \N /S /Q

rmdir /S /Q “C:\NUsers\NDesktop\NNnueva carpeta”

Aquí primero limpiará todos los archivos de todos los subdirectorios y luego limpia todos los subdirectorios vacíos. Como el directorio de trabajo actual es el directorio principal, es decir, “Nueva carpeta”, el comando rmdir no puede borrar este directorio por sí mismo.

9
9
9
2014-07-03 12:38:29 +0000

Navegue al directorio principal:

pushd "Parent Directory"

Borre las subcarpetas:

rd /s /q . 2>nul
6
6
6
2015-04-27 07:21:36 +0000

puedes usar rmdir para borrar los archivos y la subcarpeta, así:

rmdir /s/q MyFolderPath

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

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
5
5
5
2013-07-31 18:23:00 +0000
rmdir "c:\pathofyourdirectory" /q /s

No te olvides de usar las comillas y para el /q /s se borrarán todos los repositorios y sin necesidad de preguntar.

3
3
3
2014-02-05 16:39:49 +0000

Si quieres borrar todos los archivos de una carpeta, incluyendo todas las subcarpetas y no depender de algunas condiciones de error para mantener la carpeta raíz intacta (como vi en otra respuesta) podrías 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 entonces simplemente lo llamarías con:

empty_my_folder.bat "C:\whatever\is\my folder"
3
3
3
2017-02-02 19:20:53 +0000

Puedes hacerlo rápida y fácilmente poniendo estas tres instrucciones en tu archivo de murciélagos:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
1
1
1
2016-11-10 17:16:53 +0000

Para eliminar un archivo:

del PATH_TO_FILE

Para eliminar la carpeta con todos los archivos en ella:

rmdir /s /q PATH_TO_FOLDER

Para eliminar todos los archivos de una carpeta específica (no eliminar la carpeta en sí) es un poco complicado. del /s *.* no puede eliminar las carpetas, pero elimina los archivos de todas las subcarpetas. Por lo tanto, 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 quiera (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
1
1
1
2014-02-13 18:06:34 +0000

Esto funcionaba 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

)
0
0
0
2020-02-17 22:41:30 +0000

user340956 estaba dolorosamente cerca de la solución, pero ya sabes lo que dicen de cerca…

Para ser claros, rd /s /q c:\foobar borra el directorio de destino además de su contenido, pero no siempre quieres borrar el directorio en sí, a veces sólo quieres borrar su contenido y dejar el directorio en paz. El comando deltree podría hacer esto, pero Micrsoft, en su infinita “sabiduría” eliminó el comando y no lo portó a Windows.

Aquí hay una solución que funciona sin recurrir a herramientas de terceros. Probablemente sea tan simple y eficiente como sea posible con un script de línea de comandos en lugar de escribir un ejecutable real. No establece ninguna variable de entorno y no utiliza ningún bucle. También es tan seguro como puede serlo, con verificación de errores en todas partes posibles, y también tan fácil de usar como sea posible, con documentos incorporados.

dt.bat (o dt.cmd para los niños; lo que sea, soy viejo, uso .bat ):

:: dt is a Windows-compatible version of the deltree command
:: Posted to SuperUser by Synetech: https://superuser.com/a/1526232/3279

@echo off
goto start

:start
    if ["%~1"]==[""] goto usage
    pushd "%~1" 2>nul
    if /i not ["%cd%"]==["%~1"] goto wrongdir
    rd /s /q "%~1" 2>nul
    popd
goto :eof

:usage
    echo Delete all of the contents of a directory
    echo.
    echo ^> %0 DIR
    echo.
    echo %0 is a substitute for deltree, it recursively deletes the contents
    echo (files and folders) of a directory, but not the directory itself
    echo.
    echo DIR is the directory whose contents are to be deleted
goto :eof

:wrongdir
    echo Could not change to the target directory. Invalid directory? Access denied?
goto :eof

Así es como funciona:

  1. Comprueba si se ha pasado un argumento de línea de comandos, e imprime la información de uso y se cierra si no.
  2. Utiliza pushd para guardar el directorio actual, y luego cambia al directorio de destino, redirigiendo cualquier error al nul para una experiencia de línea de comandos más limpia (y registros más limpios).
  3. Comprueba si el directorio actual es ahora el mismo que el directorio de destino, e imprime un mensaje de error y cierra si no lo es. Esto evita borrar accidentalmente el contenido del directorio anterior si el comando pushd falló (por ejemplo, pasando un directorio inválido, error de acceso, etc.)
  4. Esta comprobación no distingue entre mayúsculas y minúsculas, por lo que es usualmente segura en Windows, pero no lo es para ningún sistema de archivos que distinga entre mayúsculas y minúsculas como los que usan los sistemas *nix, incluso en Windows.
  5. No funciona con nombres de archivos cortos (por ejemplo, C:\Users\Bob Bobson\foobar no será visto como el mismo que C:\Users\BobBob~1\foobar aunque realmente lo sea). Es un ligero inconveniente tener que usar el nombre de archivo no corto, pero es más seguro que lamentable, especialmente porque los SFNs no son completamente confiables o siempre predecibles (e incluso pueden estar deshabilitados por completo).
  6. Luego usa rd para borrar el directorio de destino y todo su contenido, redireccionando cualquier error (que debería haber al menos uno para el directorio mismo) a nul. Algunas notas sobre esto:
  7. Debido a que el directorio de destino es el directorio actual, el sistema tiene un archivador abierto en él, y por lo tanto no puede realmente borrarlo, por lo que permanece como está, que es el comportamiento deseado.
  8. Como no intenta eliminar el directorio de destino hasta después de haber eliminado su contenido, ahora debería estar vacío (aparte de cualquier cosa que también tenga manijas de archivos abiertos).
  9. Finalmente, utiliza popd para volver al directorio actual anterior y termina el guión.

(Si lo desea, puede comentar el guión con las descripciones anteriores utilizando rem o ::).

0
0
0
2018-05-07 18:43:18 +0000

Esto es lo que funcionó para mí.

  1. Navega dentro de la carpeta donde quieres borrar los archivos.
  2. Escriba: del *
  3. Y para sí.
  4. Hecho