Batch para eliminar carpetas con un nombre específico
adgm1 Mensajes publicados 306 Estado Miembro -
Hola
Estoy buscando eliminar carpetas que tienen un nombre específico. Quisiera buscar en primer lugar todas las carpetas que se llaman "toto", "bibi"... y luego eliminarlas.
Mi idea es usar la función IF EXIST, pero no sé cómo indicar que también hay que buscar en las subcarpetas. Porque la carpeta toto puede encontrarse en diferentes lugares dentro del directorio objetivo.
Por ejemplo, if exist "contact" rmdir "contact", if exist "liens" rmdir "liens", etc...
El objetivo es eliminar ciertas carpetas innecesarias en los perfiles de usuario. Luego lo ejecutaré como una tarea programada cada x días para que en cada nuevo perfil las carpetas innecesarias como contact, partes guardadas, favoritos... desaparezcan.
Gracias
12 respuestas
-
Tienes una forma de conocer todos los "objetos" en el directorio actual.
¿Sabes cómo averiguar si el objeto es una carpeta / directorio?
Si es una carpeta, verificas si es el o los nombres buscados.
Si es así, lo eliminas (y sus subcarpetas de forma recursiva).
Si no es uno de los nombres buscados, vuelves a llamar a tu script de forma recursiva pasando el parámetro correcto o haciendo el cd apropiado. -
Creo que el comando find podría hacer lo que deseas:
find . -name toto -or -name bibi ... -type d -exec rm -rf {}\;El '.' significa el directorio actual. Se reemplaza por el nombre del directorio deseado.
Si hay espacios o caracteres especiales en el nombre, se encierran con " ", como "Partes registradas".
Si solo deseas eliminar directorios vacíos, podrías agregar la opción -empty y reemplazar "rm -rf" por "rmdir".
El \ antes del ; al final es necesario.
-
Hola,
¿Podrías hacer algo así como:
dir /b /s /ad "directorio objetivo" > "%TMP%\lista_diretorios.txt" for /f "delims=" %%A in ('findstr /i "toto bibi" "%TMP%\lista_diretorios.txt"') do ( rmdir /s /q "%%~A" )
-
No me había dado cuenta de que se trata de autoit, el rmdir me engañó.
De hecho, rmdir no existe en cmd.
@barnabe0057:
Este script podría, sin duda, eliminar carpetas como "toto" en el directorio actual, pero probablemente no en uno de sus subdirectorios?He encontrado esto:
https://forum.hardware.fr/hfr/Programmation/Shell-Batch/dos-for-imbriquees-sujet_92855_1.htm
pero como se menciona, la expansión retardada de variables es complicada.
Sería menos complicado escribir otro script que verifique si el nombre está en la lista y devuelva un estado acorde.
Por ejemplo:
for /f "tokens=*" %%p in ('dir /ad /b') do (
; llamada a otro script que devuelve estado si el archivo está en una lista
; si estado 0 (
rd /S /Q %%p
) else (
; llamada recursiva
)
)-
Hola,
No se sabe si se trata de Autoit o de Batch, aunque por lo general es este último donde el comando RMDIR existe, aunque a menudo se resume en RD.
El modificador /s en DIR indica que debe buscar en los subdirectorios de "Directorio Objetivo"; nada impide que este último sea la raíz de una partición, excepto que la búsqueda va a durar una eternidad.
Las "sutilezas" de la expansión retardada y de la anidación FOR a menudo pueden ser eludidas mediante la llamada a una subrutina CALL, menos elegante pero más fácil de escribir.
-
-
Hola, gracias por tus respuestas.
Con el script de barnabe0057, logro eliminar todo excepto "groups", que me dice acceso denegado. En las propiedades y seguridad de la carpeta, se indica "debe tener permiso de acceso de solo lectura para ver las propiedades...".
He intentado agregar a mi script el siguiente comando para otorgar permisos elevados, pero no funciona:
takeown /f "D:\...\groups" /a /r /d o
icacls "D:\...\groups" /setowner "Administradores" /T /C¿Alguna idea para permitir la eliminación de la carpeta groups?
-
Hola,
Lo ejecutas como administrador, tu script, y ¿a quién "pertenece" esta carpeta?
Respecto a la sintaxis, ¿estás seguro de que la sintaxis de takeown es O y no Y? Las comillas no son útiles a menos que haya un carácter especial en la ruta, ¿por qué /a en lugar de atribuirte los derechos a ti mismo?
Sobre icacls, el usuario no lleva comillas y, de nuevo, ¿por qué querer apropiarte en lugar de concederte derechos a través de /grant? Ten cuidado en todos los casos con la aplicación efectiva de los permisos (en la carpeta misma y en las subcarpetas), consulta ahí las 2 primeras líneas de ejemplos:
https://ss64.com/nt/icacls.html
-
-
es un archivo compartido entre varios usuarios. El script lo ejecuto desde el controlador de dominio, así que a priori sí, es administrador. En cualquier caso, no hay problema en este nivel para eliminar todos los otros archivos.
Para takeown, está bien O para Sí y no y para Yes. No estoy seguro de si el /a tiene un interés, pero debería poder hacer que mi script se ejecute correctamente a intervalos regulares, así que diría que es necesario ser system o administrador del dominio.
Aquí está lo que tengo cuando intento los comandos para aumentar los derechos:
takeown /f "D:\...\groups" /a /r /d o
Error: el usuario actualmente conectado
no tiene privilegios de administrador.icacls "D:\...\groups" /setowner Administradores /T /C
D:\...\groups: Acceso denegado.
D:\...\groups\*: Acceso denegado.
0 archivos procesados correctamente; fallo en el procesamiento de 2 archivos.icacls "D:\...\groups" /grant:r Administradores:(OI)(CI)F /T
D:\...\groups: Acceso denegado.
0 archivos procesados correctamente; fallo en el procesamiento de 1 archivo. -
Está bien, al final, al iniciarse a través de la tarea programada, los comandos se ejecutan correctamente. Por lo tanto, se debe aplicar un permiso superior en comparación con la ejecución manual.
Sin embargo, el folder de escritorio sigue regresando sin parar cuando la sesión del usuario está conectada, probablemente porque el lugar del escritorio debe encontrarse en algún lugar. Voy a intentar trasladarlo a un disco compartido.
-
En principio, en Windows, siempre hay una carpeta Desktop asociada a cada usuario:
C:\Users\<identificador_del_usuario>\Desktop
Esto es cierto para quien emite el comando y para aquellos para quienes estás limpiando. -
La idea es más bien limpiar el explorador de archivos para dejar solo lo esencial. Y el escritorio no debe ser manipulado por los usuarios en nuestro caso. Es el administrador quien impone tal acceso directo en los escritorios. Por lo tanto, si el escritorio es accesible, se pierde el aspecto no personalizable del mismo.
-
De hecho, para el problema del escritorio, expliqué mi idea en otro post que no ha obtenido respuesta aquí.
Pero me parece viable usar GPO para trasladar los escritorios de los usuarios a una unidad compartida para que el administrador sea el único que manipule los íconos del escritorio.
-
No sé si esto es lo que buscas:
https://www.pcastuces.com/pratique/windows/autorisations_fichier/page2.htmo en modo comando:
https://www.malekal.com/comment-utiliser-icacls-pour-voir-et-modifier-les-autorisations-de-fichiers-et-dossiers/
-
En un segundo tiempo, sí, tal vez tenga que modificar los permisos de escritura/lectura para que nadie pueda modificar el escritorio. Pero también planeo ocultar la unidad mapeada que agruparía los accesos directos del escritorio.
Ya me voy a ocupar de la deportación de la carpeta del escritorio de cada usuario hacia esta unidad.