Uso de comodines con el comando rmdir o rd


40

Digamos que hay alguna carpeta en la D:unidad:

D:\Air
D:\Abonden
D:\All
D:\Whatever

Quiero eliminar todas las carpetas que comienzan con "A" (incluidas todas las subcarpetas y archivos). Intenté este comando:

rmdir D:\A* /s /q

Sin embargo, recibo un error :(

El nombre de archivo, el nombre del directorio o la sintaxis de la etiqueta de volumen es incorrecta.

El delcomando funciona con *, pero también necesito eliminar carpetas.
¿Hay alguna manera de lograr eso a través del rmdircomando?


2
La uniformidad y el sentido común nunca estuvieron en juego en el desarrollo de los shells de comandos de Windows o DOS. La parte triste es que existían sistemas modelo cuando se desarrollaron estos proyectiles que habrían arrojado luz sobre los diseños inteligentes. Por supuesto, el caparazón es solo un ejemplo del horrible proceso de pensamiento inexistente que se llevó a juntar esta basura. Me gustaría poder decirte lo que realmente pienso, ja, ja.
Rick O'Shea

Respuestas:


33
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

Use esto para probar sin embargo:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

Esto canalizará los comandos que se ejecutarán en el símbolo del sistema y le permitirá ver lo que está sucediendo.

Tenga en cuenta que esto también buscará subcarpetas como "C: \ temp \ jjj \ aaa" y eliminará la carpeta aaa. Si desea que solo mire las carpetas de nivel superior "C: \ temp \ aaa", elimine "/s"el comando.

La clave para esto es la A *, donde pondría en su cadena de búsqueda. Esto aceptará comodines como aaa*, aaa*y *aaa*si así lo desea.


Tal como está, el comando se interrumpirá si el nombre de la ruta / carpeta contiene caracteres de espacio.
y31415

1
¿Podemos agregar "IF NOT EXIST goto EFO" para A *?
Serdar

3
Esto funciona si la ruta contiene caracteres de espacio: for / f "delims ="% i in ('dir / a: d / s / b A *') do rd / s / q "% i"
Luis Cantero - MSFT

55
Solo me gustaría agregar que si ejecuta esto desde un archivo por lotes, entonces necesita usar dos signos de porcentaje para que el comando se convierta enfor /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
Fred Clausen

no es necesario usar la
marca

25

Eliminar carpetas con comodines

El comando rmdir/ rdsolo no admite caracteres comodín (es decir, *y ?). Puede solucionar esta limitación envolviéndola en un forbucle.

Ejemplo de uso

for /d %G in ("X:\A*") do rd /s /q "%~G"

Nota: Al eliminar archivos y carpetas, es posible que desee reemplazar el rdcomando por el echoprimero. De esta manera, puede asegurarse de que todo lo que no se debe eliminar realmente lo haría.

Patrones múltiples

Para eliminar varias carpetas que coinciden con diferentes patrones, la sintaxis no es muy diferente. Como @dbenham señaló correctamente, un comando de una línea es suficiente. También puede especificar diferentes rutas:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

Bonus - Comprobando la existencia de la carpeta

En caso de que desee verificar si existen carpetas específicas, puede usar el siguiente comando:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

Otras lecturas


¿Podemos agregar "IF NOT EXIST goto EFO" para A *?
Serdar

Por ejemplo, suponemos que no hay una carpeta que comience con una letra. Entonces el comando debe ir para B *. No sé si podría explicarlo o no :(
serdar

1
+1 de mi parte No entiendo el voto negativo. Aunque puedes hacer múltiples patrones con tus simples FOR /Dy FOR /D /Rcomandos. Simplemente use in( "A*" "B*" "C?D" ).
dbenham

1
En realidad, necesita la /Ropción porque la subcarpeta que coincide con la máscara podría estar debajo de un padre que no lo hace.
dbenham

55
ADVERTENCIA: Si desea usar esta solución en un archivo .bat, debe usar %% G en lugar de% G, consulte aquí
ValarDohaeris

18

¡¿Cómo nadie le ha dicho al OP sobre los archivos aún ?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/ P es pathname, donde comienza la búsqueda
/ M es una máscara de búsqueda que busca archivos que comienzan con A
/ C es el comando para ejecutar
/ S es subcarpetas recursivas (no se incluyó aquí, porque el operador no preguntó)

2
Esta es una excelente respuesta, debería ser la aceptada.
eacousineau

1
Muy buena solución y bien explicada.
Andreas

Respuesta útil: D pero IMO for /dcomo en la respuesta de y31415 es más limpia y más eficiente.
Superole

12

La respuesta adn31415 es correcta, pero se rompe si coloca esto en un script por lotes o cmd. Me golpeé la cabeza durante horas hasta que descubrí que así es como lo usas.

En la ventana de comandos de DOS:

for /d %G in ("X:\A*") do rd /s /q "%~G"

En secuencia de comandos Batch o cmd:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

Si desea ponerlo en un archivo ".bat" o ".cmd", debe duplicar los caracteres "%".


3
¡Me ahorraste el tiempo para el script Batch!
Tuan

no hay problema amigo :) Es por eso que publiqué la respuesta, ya que sabía que no era obvio y que más personas se encontrarían con ella.
Sam B

¿Podemos agregar una exclusión para que no se elimine?
serdar

SET / P PC = INTRODUCIR IP O NOMBRE DE ANFITRIÓN para / d %% a en ("\\% PC% \ D $ \ A *. *") Do rd / s / q "%% a" ¿Este scritpt funciona correctamente? ?
serdar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.