Pregunta

Necesito una forma de eliminar recursivamente una carpeta y sus elementos secundarios.

¿Existe una herramienta prediseñadas para esto o necesito escribir una?

DEL /S no elimina directorios.

DELTREE fue eliminado de Windows 2000+

¿Fue útil?

Solución

RMDIR o RD si está utilizando el símbolo del sistema clásico (cmd.exe):

rd /s /q "path"

Si está utilizando PowerShell, puede utilizar Remove-Item (que tiene el alias de del, erase, rd, ri, rm y rmdir) y toma un -Recurse argumento que puede ser acortado a -r

rd -r "path"

Otros consejos

administración:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Funciona para cualquier cosa, incluidos archivos sys

EDITAR:De hecho, encontré la mejor manera que también resuelve el problema de la ruta del archivo demasiado larga:

mkdir \empty
robocopy /mir \empty folder

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Elimina todos los directorios y archivos del directorio especificado además del directorio mismo. Se utiliza para eliminar un árbol de directorios.

  • /Q Modo silencioso, no pregunte si está bien eliminar un árbol de directorios con /S

Puedes instalar cygwin, que tiene rm así como ls etc.

Vaya a la ruta y active este comando.

rd /s /q "FOLDER_NAME"

/s :Elimina el directorio especificado y todos los subdirectorios, incluidos los archivos.Utilice /s para eliminar un árbol.

/q :Ejecuta rmdir en modo silencioso.Elimina directorios sin confirmación.

/?:Muestra ayuda en el símbolo del sistema.

Para eliminar un directorio (exista o no), utilice lo siguiente:

if exist myfolder ( rmdir /s/q myfolder )

rmdir /S /Q %DIRNAME%

rmdir /s nombredirección

Pruebe este comando:

del /s foldername

Primero, repasemos lo que rm -rf hace:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Hay tres escenarios donde rm -rf se usa comúnmente donde se espera que regrese 0:

  1. La ruta especificada no existe.
  2. La ruta especificada existe y es un directorio.
  3. La ruta especificada existe y es un archivo.

Voy a ignorar todo el asunto de los permisos, pero de todos modos nadie usa permisos ni intenta negarse el acceso de escritura a cosas en Windows (OK, eso es una broma…).

Primero colocar ERRORLEVEL a 0 y luego elimine la ruta solo si existe, usando diferentes comandos dependiendo de si es o no un directorio. IF EXIST no establece ERRORLEVEL a 0 si la ruta no existe, por lo que establecer el ERRORLEVEL a 0 primero es necesario para detectar adecuadamente el éxito de una manera que imite la normalidad. rm -rf uso.Protegiendo el RD con IF EXIST es necesario porque RD, a diferencia de rm -f, arrojará un error si el objetivo no existe.

El siguiente fragmento de guión supone que DELPATH está entrecomillado.(Esto es seguro cuando haces algo como SET DELPATH=%1.intenta poner ECHO %1 en un .cmd y pasarle un argumento con espacios y ver qué sucede usted mismo).Una vez completado el fragmento, puede comprobar si hay errores con IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

El punto es que todo es más simple cuando el entorno simplemente se ajusta a POSIX.O si instala un MSYS mínimo y simplemente lo usa.

puedes instalar GnuWin32 y use los comandos *nix de forma nativa en Windows.Instalo esto antes de instalar cualquier otra cosa en una copia nueva y original de Windows.:)

Aquí está lo que tú necesitas hacer...

Cree un archivo por lotes con la siguiente línea

RMDIR /S %1

Guarde su archivo por lotes como Remove.bat y ponlo en C:\windows

Cree la siguiente clave de registro

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Lanzamiento regedit y actualizar el valor predeterminado HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\defaultcon el siguiente valor

"c:\windows\REMOVE.bat" "%1"

¡Eso es todo!Ahora puede hacer clic derecho en cualquier directorio y usar la función RMDIR

Usando Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Reemplazar registros con el nombre del directorio que desea eliminar.

obtener elemento infantil busca el directorio secundario con el nombre de forma recursiva desde la ruta actual (.).

remover el artículo elimina el resultado.

La respuesta aceptada es excelente, pero suponiendo que tenga Node instalado, puede hacerlo de manera mucho más precisa con la biblioteca de nodos "rimraf", que permite patrones globales.Si usas esto mucho (yo lo hago), simplemente instálalo globalmente.

yarn global add rimraf

luego, por ejemplo, un patrón que uso constantemente:

rimraf .\**\node_modules

o para una frase que le permite evitar la instalación global, pero que lleva un poco más de tiempo para la descarga dinámica del paquete:

npx rimraf .\**\node_modules

esto es lo que funcionó para mí:

Intente disminuir la longitud del camino.es decir ::Cambie el nombre de todas las carpetas que conducen a dicho archivo a los nombres más pequeños posibles.Di nombres de una letra.Continúe cambiando el nombre hacia arriba en la jerarquía de carpetas.De esta manera, se reduce efectivamente la longitud del camino.Ahora finalmente intenta eliminar el archivo de inmediato.

a través de Powershell

 Remove-Item -Recurse -Force "TestDirectory"

a través del símbolo del sistema

https://stackoverflow.com/a/35731786/439130

ÚSELO BAJO SU PROPIO RIESGO.INFORMACIÓN PROPORCIONADA 'TAL CUAL'.NO PROBADO EXTENSIVAMENTE.

Haga clic con el botón derecho en el ícono de Windows (generalmente en la parte inferior izquierda) > haga clic en "Windows PowerShell (Administrador)" > use este comando (con el debido cuidado, puede eliminar fácilmente todos sus archivos si no tiene cuidado):

rd -r -include *.* -force somedir

Dónde somedir es el directorio no vacío que desea eliminar.

Tenga en cuenta que con los discos externos conectados o los discos con problemas, Windows a veces se comporta de manera extraña: no falla en la eliminación (ni en ningún intento de copia), pero el directorio no se elimina (o no se copia) según las instrucciones.(Descubrí que en este caso, al menos para mí, el comando dado por @n_y en su respuesta producirá errores como 'get-childitem :El archivo o directorio está dañado e ilegible. Como resultado en PowerShell)

También existe deltree si tienes una versión anterior de Windows.

Realmente me gusta este sitio para encontrar comandos:SS64:Del - Eliminar archivos

del /s /q directorio a eliminar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top