Cómo eliminar archivos / subcarpetas en un directorio específico en el símbolo del sistema en Windows

308

Digamos que hay una variable llamada %pathtofolder%, ya que deja en claro que es una ruta completa de una carpeta.

Quiero eliminar todos los archivos y subcarpetas de este directorio, pero no el directorio en sí.

Pero, podría haber un error como 'este archivo / carpeta ya está en uso' ... cuando eso suceda, debería continuar y omitir ese archivo / carpeta.

¿Hay algún comando para esto?

Deniz Zoeteman
fuente
Posible duplicado de ¿Qué le pasó a Deltree y cuál es su reemplazo?
Rosberg Linhares
Es una locura lo difícil que es Windows al eliminar carpetas ... O al hacer una que comienza con un punto ... ¡Gracias a Dios por la integración de Bash en Windows! rm -rf path\to\folderfunciona en Windows 10 (o podría provenir de Git Bash ... ¡de cualquier manera si tienes que probarlo!)
Stijn de Witt

Respuestas:

256

Puede usar este script de shell para limpiar la carpeta y los archivos dentro de la C:\Temp fuente :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Cree un archivo por lotes (por ejemplo, delete.bat) que contenga el comando anterior. Vaya a la ubicación donde se encuentra el archivo delete.bat y luego ejecute el comando: delete.bat

Iain
fuente
20
Lo intenté pero desafortunadamente los archivos no se eliminaron, solo se eliminan las subcarpetas. Por ejemplo, tengo una carpeta llamada Test. Contiene 2 carpetas llamadas "Ripon" y "Wasim" y contiene un archivo llamado "riponalwasim.txt". Se eliminaron las subcarpetas Ripon y Wasim, pero riponalwasim.txt no se eliminó.
Ripon Al Wasim
16
Utilice un signo de porcentaje único si desea ejecutar directamente desde la línea de comando, por ejemplo%p
Alex
2
Es triste que esto tome 2 líneas, ¡pero al menos funciona! Estoy cansado de buscar un "one-liner" que funcione e iré con este, ¡gracias!
Nightcoder
2
Puede usar el operador '&&' para ejecutar dos comandos en una línea sin un archivo bat (observe el solo '%' en lugar de '%%'). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q
ravinsp
<for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> podría ayudar a los archivos (simplemente elimine ese eco)
grenix
340

rmdir es mi comando favorito de todos los tiempos para el trabajo. Funciona para eliminar grandes archivos y carpetas con subcarpetas. No se crea una copia de seguridad, así que asegúrese de haber copiado sus archivos de forma segura antes de ejecutar este comando.

RMDIR "FOLDERNAME" /S /Q

Esto elimina silenciosamente la carpeta y todos los archivos y subcarpetas.

Suresh
fuente
65
Esto parece eliminar el pathtofolder que el OP quería mantener.
Fuzz Evans
44
Esto eliminaría la carpeta en sí, por lo que deberá agregar otro comando: md FOLDERNAME(vea la respuesta de @rakoczyn a continuación).
Thdoan
44
¿Qué quiere decir con "copia de seguridad se crea" aquí? No puedo ver nada que pueda crear ningún tipo de respaldo ...
Paul Groke
1
El directorio no está vacío ¡El mensaje llegó como respuesta!
Jamshaid Kamran
10
Para no eliminar la carpeta en sí, conviértala en el directorio actual antes, luego use "." como FOLDERNAME Volver a crearlo después no es necesariamente lo mismo porque las ACL podrían perderse. cd "FOLDERNAME" RD . /S /Q
Moritz Ambos
85

La solución más simple que se me ocurre es eliminar todo el directorio con

RD /S /Q folderPath

Luego creando este directorio nuevamente:

MD folderPath
wojciech_rak
fuente
55
¿Qué pasa si tiene permiso para eliminar pero no crear nuevas carpetas? Espero que sea posible :)
Sandy
13
Esta es una mala solución, ya que introduce una carrera en el sistema de archivos para el nodo de directorio, es decir, el segundo comando puede fallar si se ejecuta inmediatamente después.
Rok Strniša
22
Además, una mala solución si el directorio tiene permisos especiales que acaba de bombardear ejem (whoops)
Immortal Blue
No se desanime con la respuesta: "El directorio no está vacío", simplemente emita el comando dos veces :-)
Kieran Ryan
1
RD y RMDIR son el mismo comando y desde que publicó esta respuesta 9 meses después de que alguien dijo la misma respuesta, ¿por qué la gente le da puntos?
Cambiar el
51

Esto eliminará las carpetas y archivos y dejará la carpeta atrás.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)
FoxDrive
fuente
44
Para cualquiera que no esté seguro de este enfoque: definitivamente no vuelve a crear el directorio. Sin 2>nul, genera "El proceso no puede acceder al archivo porque está siendo utilizado por otro proceso".
Rok Strniša
66
Odio que Windows no pueda eliminar archivos y carpetas que están siendo utilizados por algún programa. Y me encanta que hayas usado eso a tu favor en esta frase.
andref
¿Entonces esta súper magia es cómo vaciamos una carpeta en Windows? Impresionante :)
mlvljr
3
@mlvljr Solo si desea conservar la carpeta principal también. RD /?le mostrará la manera simple de vaciar una carpeta.
foxidrive
1
Esto es bueno si necesita volver a su ubicación inicial, de lo contrario, simplemente CD mypath && RD /S .sería suficiente. Sin embargo, no me gusta que tengas que repetir tu camino dos veces, para caminos largos se hace difícil de leer. Así que simplemente agregaría un set p="mypath"al principio.
Amit Naidu
39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... elimina todos los archivos y carpetas debajo del directorio dado, pero no el directorio en sí.

thepip3r
fuente
44
esta debe ser la respuesta correcta .. acaba de hacer sencilla .. deletemyfoldercontents.bat archivo .. pop en su camino y funciona como un encanto ..
timbrown
3
La línea de comando DEL pierde la opción /Ade eliminar también los archivos con un conjunto de atributos ocultos y %dir%\*debe encerrarse entre comillas dobles "%dir%\*"para trabajar también para directorios que contienen un espacio o uno de estos caracteres &()[]{}^=;!'+,`~. Y la línea de comando FOR debe modificarse for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"porque FOR ignora los directorios con un conjunto de atributos ocultos. DIR con opciones /AD /Bgenera todos los directorios con solo sus nombres. Por cierto: dirno es un buen nombre para una variable de entorno.
Mofi
1
no elimina la subcarpeta
RMiranda
1
@RMiranda, en mis pruebas, hace exactamente lo que pidió el OP. ¿Tiene un caso en el que no elimina las subcarpetas?
thepip3r
¿Esta respuesta responde al requisito "puede haber un error como 'este archivo / carpeta ya está en uso' ... cuando eso sucede, simplemente debe continuar y omitir ese archivo / carpeta". ?
Peter Mortensen
30
CD [Your_Folder]
RMDIR /S /Q .

Recibirá un mensaje de error que le indica que el comando RMDIR no puede acceder a la carpeta actual, por lo que no puede eliminarlo.

Actualización :

A partir de este útil comentario (gracias a Moritz Both ), puede agregar &&entre, por RMDIRlo que no se ejecutará si el CDcomando falla (por ejemplo, nombre de directorio mal escrito):

CD [Your_Folder] && RMDIR /S /Q .

De la referencia de línea de comandos de Windows :

/ S: elimina un árbol de directorios (el directorio especificado y todos sus subdirectorios, incluidos todos los archivos).

/ Q: especifica el modo silencioso. No solicita confirmación al eliminar un árbol de directorios. (Tenga en cuenta que / q solo funciona si se especifica / s).

O.Badr
fuente
1
Esto es perfecto para el vaciado de temperatura, pero eso cd [Your_Folder]es súper crítico - Voy a tener que recordar que lo que no elimine el directorio en sí mismo ...
salvia
55
Esta es la solución correcta. Agregue &&entre los comandos en lugar del salto de línea y estará a salvo de un CD defectuoso.
Moritz Ambos
Esta es una solución simple y correcta. ¡Incluso funciona con el shell de comandos de Azure!
Philippe
solución bastante mala ... Por ejemplo, necesito esta eliminación de la línea de comandos para una actualización de svn: quiero eliminar todos los archivos y carpetas antes de realizar la actualización de svn porque puede haber algunos cambios en la máquina donde uso esto, pero relevante son solo los artículos registrados. Haciendo RMDIR / S / Q. también elimina el enlace SVN y, por lo tanto, hace que la carpeta ya no sea una carpeta svn
Dominik Lemberger
¿Cómo es esto diferente de las cuatro respuestas anteriores?
Peter Mortensen
9

RD significa REMOVE Directory.

/ S: elimina todos los archivos y subcarpetas además de la carpeta misma. Use esto para eliminar un árbol de carpetas completo.

/ Q: Silencioso: no muestra la confirmación SN

Ejemplo:

RD /S /Q C:/folder_path/here
Sireesh Yarlagadda
fuente
1
upvoted por ser el único que explicar lo que /Sy /Qmedia
SourceVisor
2
No. rdes equivalente rmdiry eliminará el directorio en sí y no es lo que OP quiere.
WesternGun
¿Esta respuesta responde al requisito "podría haber un error como 'este archivo / carpeta ya está en uso' ... cuando eso sucede, simplemente debe continuar y omitir ese archivo / carpeta"? Por ejemplo, ¿aborta completamente en lugar de continuar?
Peter Mortensen
8

Yo uso Powershell

Remove-Item c:\scripts\* -recurse

Eliminará el contenido de la carpeta, no la carpeta en sí.

rhellem
fuente
La respuesta de rhellem es reciente, pero es la única respuesta que realmente hará esto por mí. (Gana 8.1, no por elección)
filólogo
2
Desde la línea de comando de lote:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares
Tenga en cuenta que el "*" es necesario o eliminará la carpeta.
mhenry1384
7

Ninguna de las respuestas publicadas el 2018-06-01, con la excepción de la línea de comando única publicada por foxidrive , realmente eliminó todos los archivos y todas las carpetas / directorios %PathToFolder%. Esa es la razón para publicar una respuesta más con una línea de comando única muy simple para eliminar todos los archivos y subcarpetas de una carpeta, así como un archivo por lotes con una solución más compleja que explica por qué todas las otras respuestas publicadas en 2018-06-01 usando DEL y FOR con RD no pudo limpiar una carpeta por completo.


La solución de línea de comando simple simple que, por supuesto, también se puede usar en un archivo por lotes:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Esta línea de comando contiene tres comandos ejecutados uno después del otro.

El primer comando PUSHD empuja la ruta del directorio actual en la pila y luego crea%PathToFolder% el directorio actual para ejecutar el proceso del comando.

Esto también funciona para las rutas UNC de forma predeterminada debido a que las extensiones de comando están habilitadas de forma predeterminada y en este caso PUSHD crea una letra de unidad temporal que apunta a ese recurso de red especificado y luego cambia la unidad y el directorio actuales, utilizando la letra de unidad recién definida.

PUSHD emite el siguiente mensaje de error para manejar STDERR si el directorio especificado no existe en absoluto:

El sistema no puede encontrar la ruta especificada.

Este mensaje de error se suprime al redirigirlo 2>nulal dispositivo NUL .

El siguiente comando RD se ejecuta solo si el cambio del directorio actual para el proceso de comando actual al directorio especificado fue exitoso, es decir, el directorio especificado existe.

El comando RD con las opciones /Qy /Selimina un directorio silenciosamente con todos los subdirectorios incluso si el directorio especificado contiene archivos o carpetas con atributos ocultos o con un conjunto de atributos de solo lectura. El atributo del sistema nunca impide la eliminación de un archivo o carpeta.

No eliminados son:

  1. Carpetas utilizadas como el directorio actual para cualquier proceso en ejecución. No se puede eliminar todo el árbol de carpetas de dicha carpeta si se usa una carpeta como el directorio actual para cualquier proceso en ejecución.

  2. Los archivos abiertos actualmente por cualquier proceso en ejecución con permisos de acceso a archivos establecidos en el archivo abierto para evitar la eliminación del archivo mientras está abierto por la aplicación / proceso en ejecución. Tal archivo abierto evita también la eliminación de todo el árbol de carpetas al archivo abierto.

  3. Archivos / carpetas en los que el usuario actual no tiene los permisos requeridos (NTFS) para eliminar el archivo / carpeta, lo que impide también la eliminación del árbol de carpetas a este archivo / carpeta.

Esta línea de comando utiliza la primera razón para no eliminar una carpeta para eliminar todos los archivos y subcarpetas de la carpeta especificada, pero no la carpeta en sí. La carpeta se convierte temporalmente en el directorio actual para ejecutar el proceso de comando que impide la eliminación de la carpeta en sí. Por supuesto, esto da como resultado la salida de un mensaje de error mediante el comando RD :

El proceso no puede acceder al archivo porque está siendo utilizado por otro proceso.

Archivo es el término incorrecto aquí, ya que en realidad la carpeta está siendo utilizada por otro proceso, el proceso de comando actual que ejecutó el comando RD . Bueno, en realidad una carpeta es para el sistema de archivos un archivo especial con un directorio de atributos de archivo que explica este mensaje de error. Pero no quiero profundizar demasiado en la gestión del sistema de archivos.

Este mensaje de error, como todos los demás mensajes de error, que podría ocurrir debido a las tres razones escritas anteriormente, se suprime al redirigirlo 2>nuldesde el controlador STDERR al dispositivo NUL .

El tercer comando, POPD , se ejecuta independientemente del valor de salida del comando RD .

POPD abre la ruta del directorio empujada por PUSHD desde la pila y cambia el directorio actual para ejecutar el proceso de comando a este directorio, es decir, restaura el directorio actual inicial. POPD elimina la letra de unidad temporal creada por PUSHD en caso de una ruta de carpeta UNC.

Nota: POPD puede fallar silenciosamente al restaurar el directorio actual inicial en caso de que el directorio actual inicial fuera un subdirectorio del directorio para limpiar que ya no existe. En este caso especial %PathToFolder%permanece el directorio actual. Por lo tanto, es recomendable ejecutar la línea de comando anterior no desde un subdirectorio de %PathToFolder%.

Un hecho más interesante : probé la línea de comando también usando una ruta UNC al compartir el directorio local C:\Tempcon el nombre compartido Tempy usando la ruta UNC \\%COMPUTERNAME%\Temp\CleanTestasignada a la variable de entorno PathToFolderen Windows 7. Si el directorio actual al ejecutar la línea de comando es un subdirectorio de un local compartido La carpeta a la que se accede mediante la ruta UNC, es decir C:\Temp\CleanTest\Subfolder1, Subfolder1es eliminada por RD , y el siguiente POPD falla silenciosamente al C:\Temp\CleanTest\Subfolder1volver a crear el directorio actual, lo que resulta en Z:\CleanTestel directorio actual para el proceso de comando en ejecución. Entonces, en este caso muy especial, la letra de unidad temporal permanece hasta que se cambie el directorio actual, por ejemplo concd /D %SystemRoot%a un directorio local realmente existente. Desafortunadamente POPDno sale con un valor mayor de 0 si no puede restaurar el directorio actual inicial, lo que hace imposible detectar esta condición de error muy especial usando solo el código de salida de POPD . Sin embargo, se puede suponer que nadie se encuentra con este caso de error muy especial ya que las rutas UNC generalmente no se utilizan para acceder a archivos y carpetas locales.

Para comprender aún mejor los comandos utilizados, abra una ventana de símbolo del sistema, ejecute allí los siguientes comandos y lea la ayuda que se muestra para cada comando con mucho cuidado.

  • pushd /?
  • popd /?
  • rd /?

Una sola línea con múltiples comandos usando el archivo por lotes de Windows explica los operadores &&y se &usa aquí.


A continuación, veamos la solución de archivo por lotes utilizando el comando DEL para eliminar archivos %PathToFolder%y FOR y RD para eliminar las subcarpetas %PathToFolder%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

El archivo por lotes primero se asegura de que la variable de entorno PathToFolderesté realmente definida con una ruta de carpeta sin comillas dobles y sin una barra diagonal inversa al final. La barra diagonal inversa al final no sería un problema, pero las comillas dobles en una ruta de carpeta podrían ser problemáticas debido a que el valor de PathToFolderse concatena con otras cadenas durante la ejecución del archivo por lotes.

Importantes son las dos líneas:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

El comando DEL se usa para eliminar todos los archivos en el directorio especificado.

  • La opción /Aes necesaria para procesar realmente todos los archivos, incluidos los archivos con el atributo oculto que DEL ignoraría sin usar la opción /A.
  • La opción /Fes necesaria para forzar la eliminación de archivos con el conjunto de atributos de solo lectura.
  • La opción /Qes necesaria para ejecutar una eliminación silenciosa de varios archivos sin preguntar al usuario si realmente se deben eliminar varios archivos.
  • >nules necesario para redirigir la salida de los nombres de archivo escritos para manejar STDOUT al dispositivo NUL del cual no se puede eliminar debido a que un archivo está abierto actualmente o el usuario no tiene permiso para eliminar el archivo.
  • 2>nules necesario redirigir la salida del mensaje de error para cada archivo que no se puede eliminar del identificador STDERR al dispositivo NUL .

Los comandos FOR y RD se utilizan para eliminar todos los subdirectorios en el directorio especificado. Pero for /Dno se usa porque FOR ignora en este caso los subdirectorios con el conjunto de atributos ocultos. Por esa razón, for /Fse utiliza para ejecutar la siguiente línea de comando en un proceso de comando separado que se inicia en segundo plano con %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

Las salidas DIR en formato simple debido a /Blas entradas de directorio con atributo D, es decir, los nombres de todos los subdirectorios en el directorio especificado independientemente de otros atributos como el atributo oculto sin una ruta. 2>nulse utiliza para redirigir la salida del mensaje de error por DIR en ningún directorio encontrado del identificador STDERR al dispositivo NUL .

El operador de redirección >debe escapar con el carácter de intercalación ^, en la línea de comando FOR para ser interpretado como un carácter literal cuando el intérprete de comandos de Windows procesa esta línea de comando antes de ejecutar el comando FOR que ejecuta la dirlínea de comando incrustada en un proceso de comando separado iniciado en el fondo.

FOR procesa la salida capturada escrita para manejar STDOUT de un proceso de comando iniciado que son los nombres de los subdirectorios sin ruta y nunca encerrados entre comillas dobles.

FOR con opción /Fignora las líneas vacías que no aparecen aquí ya que DIR con opción /Bno genera líneas vacías.

FOR también ignoraría las líneas que comienzan con un punto y coma, que es el carácter predeterminado de final de línea. Un nombre de directorio puede comenzar con un punto y coma. Por esa razón, eol=|se utiliza para definir el carácter de barra vertical como el carácter de fin de línea que ningún directorio o archivo puede tener en su nombre.

FOR dividiría la línea en subcadenas usando espacio y tabulación horizontal como delimitadores y asignaría solo la primera cadena delimitada por espacio / tabulación a la variable de bucle especificada I. Aquí no se desea este comportamiento de división debido a que un nombre de directorio puede contener uno o más espacios. Por delims=lo tanto, se utiliza para definir una lista vacía de delimitadores para deshabilitar el comportamiento de división de línea y asignarse a la variable de bucle I, siempre el nombre completo del directorio.

El comando FOR ejecuta el comando RD para cada nombre de directorio sin una ruta, razón por la cual en la línea de comando RD la ruta de la carpeta debe especificarse una vez más, que se concatena con el nombre de la subcarpeta.

Para comprender los comandos utilizados y cómo funcionan, abra una ventana de símbolo del sistema, ejecute allí los siguientes comandos y lea con cuidado todas las páginas de ayuda que se muestran para cada comando.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?
Mofi
fuente
5

Use el Bloc de notas para crear un documento de texto y copiar / pegar esto:

rmdir /s/q "%temp%"
mkdir "%temp%"

Seleccione Guardar como y nombre de archivo:

delete_temp.bat

Guardar como tipo: todos los archivos y haga clic en el Savebotón.

Funciona en cualquier tipo de cuenta (administrador o usuario estándar). ¡Solo ejecútalo!

Yo uso una variable temporal en este ejemplo, ¡pero puedes usar cualquier otra! PD: ¡Solo para el sistema operativo Windows!

Filip Gjorgjevikj
fuente
una solución bastante fácil y limpia
Carlos Liu
4

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"
Maxim Suslov
fuente
Si eso es correcto. Deben ser dos pasos. Esto merece más votos a favor, porque explica por qué, en comparación con una respuesta más votada anteriormente.
WesternGun
La línea de comando DEL pierde la opción /Ade eliminar también archivos con conjunto de atributos ocultos y la opción /Fde eliminar también archivos con conjunto de atributos de solo lectura y comillas dobles alrededor del último argumento. Entonces del /A /F /Q "PATH_TO_FOLDER\*"sería mejor. Y la línea de comando FOR debe modificarse for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"porque FOR ignora los directorios con un conjunto de atributos ocultos. DIR con opciones /AD /Bgenera todos los directorios PATH_TO_FOLDERcon solo sus nombres.
Mofi
¿Cómo es esto diferente de (algunas de) las respuestas anteriores?
Peter Mortensen
4

Puede hacerlo utilizando el siguiente comando para eliminar todo el contenido y la carpeta principal en sí:

RMDIR [/S] [/Q] [drive:]path            
Ripon Al Wasim
fuente
¿Cómo es esto diferente de las dos respuestas anteriores?
Peter Mortensen
¿Esta respuesta responde al requisito "puede haber un error como 'este archivo / carpeta ya está en uso' ... cuando eso sucede, simplemente debe continuar y omitir ese archivo / carpeta". ?
Peter Mortensen
1

Intenté varios de estos enfoques, pero ninguno funcionó correctamente.

Encontré este enfoque de dos pasos en la línea de comandos de Windows del sitio :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Funcionó exactamente como lo necesitaba y según lo especificado por el OP.

Paul Haan
fuente
Las dos líneas de comando se pueden combinar en una línea de comando: la opción forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL/A se agrega para eliminar también los archivos con el conjunto de atributos ocultos, ya que de lo contrario DEL generaría un mensaje de error no encontrado para cada archivo oculto %pathtofolder%. La opción DEL/F se agrega para eliminar también archivos con el atributo de solo lectura establecido, %pathtofolder%ya que de lo contrario DEL generaría un mensaje de error de acceso denegado.
Mofi
Esta solución es la más lenta de todas las soluciones incompletas publicadas aquí debido al inicio de una cmd.exeinstancia para cada archivo y cada directorio %pathtofolder%. La ventaja es que FORFILES no ignora los directorios con atributos ocultos establecidos como FOR .
Mofi
Re "Funcionó exactamente como lo necesitaba y según lo especificado por el OP". : ¿Probó el requisito "podría haber un error como 'este archivo / carpeta ya está en uso' ... cuando eso suceda, debería continuar y omitir ese archivo / carpeta". ?
Peter Mortensen
0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q
Robie
fuente
La segunda línea eliminará los archivos de cada archivo de todas las carpetas en el directorio temporal de Windows y la tercera línea limpia los directorios, incluido su contenido.
Robie
La línea de comando FOR debe modificarse for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"porque FOR ignora los directorios con un conjunto de atributos ocultos. DIR con opciones /AD /Bgenera todos los directorios %TEMP%con solo sus nombres.
Mofi
Documentación para DEL . Creo que está en el camino correcto con / F: "Ignorar la configuración de solo lectura y eliminar de todos modos (FUERZA)"
Peter Mortensen
-10

Utilizar:

del %pathtofolder%\*.*   /s /f  /q

Esto elimina todos los archivos y subcarpetas %pathtofolder%, incluidos los archivos de solo lectura, y no solicita confirmación.

solo
fuente
99
Enemigo esto deja subcarpetas vacías en% pathtofolder%.
DH
35
NO elimina subcarpetas en% pathtofolder%. Tan malo que no tengo reputación de rechazar esta respuesta falsa
Vitalii Korsakov
1
Como señaló Vitalii Korsakov, esto elimina todos los archivos y archivos de los subdirectorios, pero deja los subdirectorios en su lugar que el OP también preguntó cómo eliminar.
Fuzz Evans
66
Aunque este comando deja carpetas vacías, está mucho más cerca de lo solicitado que la respuesta aceptada. Por supuesto, esto depende de las circunstancias. En mi caso, preferiría tener carpetas vacías, que los archivos que quedan en el directorio raíz.
MarcusUA
pero cómo podemos eliminar las carpetas y subcarpetas que estaban abiertas en el recurso compartido de red cuando otra máquina cliente abre la unidad compartida que tiene acceso de escritura a esa carpeta ... el comando psfile y net files cerrará la sesión del archivo, pero nuevamente después de unos segundos creará automáticamente otra sesión para ese usuario en el servidor ...
user1954762