2009-10-01 19 views
47

Uso Windows.Cómo eliminar todos los archivos y carpetas en una carpeta mediante una llamada a cmd

Quiero eliminar todos los archivos y carpetas de una carpeta mediante una llamada al sistema.

puedo llamar así:

>rd /s /q c:\destination 
>md c:\destination 

¿Conoce una manera más fácil?

+0

http://superuser.com/questions/173859/how-can-i-delete-all-files-subfolders-in-a-given-folder-via-the-command-prompt –

+0

Posible duplicado de [¿Qué pasó con deltree, y cuál es su reemplazo?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to-deltree-and-whats-its-replacement) –

Respuesta

86

No, no sé una.

Si desea conservar el directorio original, por alguna razón, y en su lugar realmente quiere vaciarlo, a continuación, puede hacer lo siguiente (ACL, & c.):

del /q destination\* 
for /d %x in (destination\*) do @rd /s /q "%x" 

Este primer elimina todos los archivos desde el directorio, y luego elimina recursivamente todos los directorios anidados, pero en general mantiene el directorio de nivel superior tal como está (excepto por su contenido).

Tenga en cuenta que dentro de un archivo por lotes que necesita para duplicar el % dentro del bucle for:

del /q destination\* 
for /d %%x in (destination\*) do @rd /s /q "%%x" 
+2

es la forma de hacerlo –

+3

pude hacer esto sin un archivo por lotes. use el && para concat las dos operaciones –

+1

Soy un novato completo de Windows-shell: ¿cómo configuro el destino a una ruta con este ejemplo? –

18

del c:\destination\*.* /s /q trabajó para mí. Espero que eso te funcione también.

+7

Elimina todos los archivos pero no las carpetas. – Eric

+1

Lo que funcionó para mí fue navegar a la carpeta. (haga clic con el botón derecho, seleccione abrir el indicador de cmd aquí) luego 'del *. *' –

8

Si los nombres de la subcarpeta pueden contener espacios, debe rodearlos con comillas escapadas. El siguiente ejemplo muestra esto para los comandos usados ​​en un archivo por lotes.

set targetdir=c:\example 
del /q %targetdir%\* 
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^" 
1

Una opción de una línea fácil es crear un directorio vacío en algún lugar de su sistema de archivos, y luego usar ROBOCOPY (http://technet.microsoft.com/en-us/library/cc733145.aspx) con el interruptor /MIR para eliminar todos los archivos y subcarpetas. De forma predeterminada, robocopy no copia la seguridad, por lo que las ACL en su carpeta raíz deben permanecer intactas.

También es probable que desee establecer un valor para el modificador de reintentos, /r, porque el número predeterminado de reintentos es 1 millón.

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3 
0

Tenía una carpeta de índice con 33 carpetas que necesitaban eliminar todos los archivos y subcarpetas. Abrí una línea de comandos en la carpeta de índice y luego se usa estos comandos:

for /d in (*) do rd /s /q "%a" & (
md "%a") 

les separa en dos líneas (pulsa enter después de la primera línea, y cuando se le preguntó por más agregar segunda línea), ya que si se ha introducido en una sola línea esto puede no funcionar. Este comando borrará cada directorio y luego creará uno nuevo que estará vacío, eliminando así todos los archivos y subfluders en el directorio original.

15

Creo que la forma más fácil de hacerlo es:

rmdir /s /q "C:\FolderToNotToDelete\" 

El último "\" en la ruta es la parte importante.

+15

Esto también elimina la carpeta. – Archie

+0

Perfecto, esto es lo que necesito :) – gNerb

+0

¿Esto funciona recursivamente? ¿Cuál es el camino que es demasiado largo? – eomeroff

1

Para eliminar el archivo:

del PATH_TO_FILE 

Para eliminar carpeta con todos los archivos en ella:

rmdir /s /q PATH_TO_FOLDER 

Para eliminar todos los archivos de la carpeta específica (carpeta no borrar sí mismo) es un poco complicado. del /s *.* no se pueden eliminar carpetas, pero se eliminan 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" 

Se puede crear una secuencia de comandos para eliminar lo que quieras (carpeta o archivo) como esto 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 ejemplo de uso:

mydel.bat "path\to\folder with spaces" 
mydel.bat path\to\file_or_folder 
4

¡Sí! Usar Powershell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force" 
Cuestiones relacionadas