Ms-Dos - Borrar carpetas también en un script

 
Vista:
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 03/10/2018 10:51:59
Tengo este código para borrar los archivos que grabo:

1
Forfiles -p "D:\Cameras\" -s -m *.avi -d -30 -c "cmd /c del @path /q"

Mi problema es que solo borra los archivos .avi, y quiero que borre también las carpetas dentro de esa carpeta Cameras.

He probado con rmdir y rm, pero no soy capaz de que funciona.

¿Alguien me puede ayudar?

¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 03/10/2018 12:53:45
Para borrar las carpetas tienes que utilizar:

1
2
3
RD Carpeta
o
RMDIR Carpeta

Para forzar el borrado de la carpeta y todo su contenido:

1
2
3
RD Carpeta /S /Q
o
RMDIR Carpeta /S /Q

Ver

1
RD /?

para borrar todas las carpetas de un directorio:

1
2
3
@echo off
cd C:\Cameras
for /D %%a in (*.*) do RD %%a /S /Q

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 03/10/2018 13:17:06
Hola, Antoni. Muchas gracias por tu respuesta. Sí, eso es lo que busco, pero no se comporta tal y como quiero. Mira, te explico, a ver si lo entiendes para que me ayudes mejor. Te hago un esquema:

1
2
3
4
5
6
7
8
9
10
11
CARPETA CÁMARAS
    SUBCARPETA CÁMARA 1
        SUBCARPETA CON LA FECHA DE AYER
            Vídeo
        SUBCARPETA CON LA FECHA DE HOY
            Vídeo
    SUBCARPETA CÁMARA 2
        SUB-SUBCARPETA CON LA FECHA DE AYER
            Vídeo
        SUB-SUBCARPETA CON LA FECHA DE HOY
            Vídeo

Vale, pues quiero que me borre tanto las carpetas y vídeos que no sean de hoy, para que el resultado sea este:

1
2
3
4
5
6
7
CARPETA CÁMARAS
    SUBCARPETA CÁMARA 1
        SUB-SUBCARPETA CON LA FECHA DE HOY
            Vídeo
    SUBCARPETA CÁMARA 2
        SUB-SUBCARPETA CON LA FECHA DE HOY
            Vídeo

¿Esto se puede conseguir con un script solo? ¿O es mejor añadir un script en cada subcarpeta (la de cada cámara)?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 03/10/2018 21:09:19
¿Cual es el nombre de la carpeta con la fecha?

1
2
3
4
5
6
7
8
9
10
11
12
@echo off
cd C:\Cameras
:Nivel_1
    for /D %%a in (*.*) do call :Nivel_2 %%a
    goto :eof
 
:Nivel_2
    cd %1
    set Fecha_Hoy=%...%
    for /D %%a in (*.*) do if not "%%a" == %Fecha_Hoy% rd %%a /S /Q
    cd ..
    goto :EOF

NO ESTA PROBADO, no funciona y puede causar perdida de datos

La idea es algo así, falta pulírlo probarlo que con MS-DOS nada funciona como crees que debería.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 03/10/2018 22:38:32
A ver. Esto es para unas cámaras para un local. Necesito un script que vaya borrando, para no acumular. He puesto como ejemplo el día de hoy, pero en realidad manejo la posibilidad de guardar los últimos treinta días, de ahí el primer script que ponga un 30. Yo tenía ese script más sencillito para unas copias de seguridad de mis documentos.

Luego, sobre el nombre de la carpeta. Eso debería dar igual. Quiero decir que no debería fijarse tanto en cuál sea el nombre de la carpeta que cree, porque será distinto cada día.

Por este motivo, te decía si es recomendable un script en cada una de las carpetas de las cámaras.

Muchas gracias por las molestias.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 04/10/2018 07:44:11
Se me olvido lo de guardar los 30 últimos días y me que de con el ultimo correo de ejemplo

1
2
3
4
5
6
7
8
9
10
11
@echo off
cd C:\Cameras
:Nivel_1
    for /D %%a in (*.*) do call :Nivel_2 %%a
    goto :eof
 
:Nivel_2
    cd %1
    FOR /F "skip=30 delims=*" %%b IN ('DIR /O-D /AD /B') DO RD "%%b" /S /Q
    cd ..
    goto :EOF

Esto si te guarda un número de días determinado, en este caso 30 y borra los más antiguos.
Si lo quieres hacer por fecha se complica un poco más pero se puede hacer.

Ya me contaras.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 04/10/2018 09:06:09
Por fecha no me hace falta. Está bien 30 días. Sin embargo, me he montado un pequeño ejemplo para probarlo y no borra nada. Te pasaba el ejemplo para que lo tuvieras, pero en cuanto lo descomprimas, te cambia las fechas y tienes que modificarlas con un programa.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 04/10/2018 10:35:43
He probado el BAT para Borrar y funciona Perfectamente.

Para probarlo he creado este segundo BAT que crea una estructura ficticia de tres niveles de directorios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
 
MD C:\Camaras_TMP
CD C:\Camaras_TMP
 
FOR /L %%a in (0, 1, 9) do call :Crea_1 %%a
cd \Tmp
goto :EOF
 
:Crea_1
    MD CAMARA_%1
    For %%m in (01 02 03 04 05 09 07 08 09 10 11 12) DO Call :Crea_2 %1 %%m
    goto :EOF
 
:Crea_2
    For %%d in (01 01 03 04 05 09 07 08 09 10) DO MD  CAMARA_%1\Fecha_2018_%2_%%d
    For %%d in (11 11 13 14 15 19 17 18 19 20) DO MD  CAMARA_%1\Fecha_2018_%2_%%d
    For %%d in (21 21 23 24 25 29 27 28 29 30) DO MD  CAMARA_%1\Fecha_2018_%2_%%d
    goto :EOF

El que borra solo debe saber el nombre del primer directorio, el resto no importa como se llame

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
cd C:\Camaras_TMP
echo %CD%
pause
:Nivel_1
    for /D %%a in (*.*) do call :Nivel_2 %%a
    goto :eof
 
:Nivel_2
    cd %1
    FOR /F "skip=30 delims=*" %%b IN ('DIR /O-D /AD /B') DO RD "%%b" /S /Q
    cd ..
    goto :EOF

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 04/10/2018 10:35:42
Mire, le grabo un vídeo de lo que hago, a ver si damos con lo que hago mal:

https://www.dropbox.com/s/yu0mtjzaic90sg8/LWDP.mp4?dl=0

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 04/10/2018 16:00:53
Esto Genera 10 directorios que cuelgan de Cameras y dentro de cada uno de ellos crea a su vez 360 nuevos directorios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
 
REM "Cuando el nombre de una ruta o fichero tiene espacios hay que ponerlo entre comillado"
 
CD "C:\Users\Usuario\00 Diego\Bandeja de Entrada\Cameras"
 
FOR /L %%a in (0, 1, 9) do call :Crea_1 %%a
cd \Tmp
goto :EOF
 
:Crea_1
    MD Sub_Camara_%1
    For %%m in (01 02 03 04 05 09 07 08 09 10 11 12) DO Call :Crea_2 %1 %%m
    goto :EOF
 
:Crea_2
    For %%d in (01 01 03 04 05 09 07 08 09 10) DO MD  Sub_Camara_%1\Fecha_2018_%2_%%d
    For %%d in (11 11 13 14 15 19 17 18 19 20) DO MD  Sub_Camara_%1\Fecha_2018_%2_%%d
    For %%d in (21 21 23 24 25 29 27 28 29 30) DO MD  Sub_Camara_%1\Fecha_2018_%2_%%d
    goto :EOF

Este es el que borra y lo voy a cambiar para que deje solo 5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
 
REM "Este Cambio de directorio es MUY importante que este bien porque si se sitúa en un lugar"
REM  "equivocado puede hacer mucho DAÑO"
 
CD "C:\Users\Usuario\00 Diego\Bandeja de Entrada\Cameras"
 
REM "El ECHO y el PAUSE es verificar que esta en el sitio correcto. Después se puede quitar."
 
echo.
echo Directorio a borrar: %CD%
echo.
Pause
 
:Nivel_1
    for /D %%a in (*.*) do call :Nivel_2 %%a
    goto :eof
 
:Nivel_2
    cd %1
    FOR /F "skip=5 delims=*" %%b IN ('DIR /O-D /AD /B') DO RD "%%b" /S /Q
    cd ..
    goto :EOF

He puesto algunos comentarios en los BAT.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 04/10/2018 16:18:15
Ahora sí que funciona. Una última cosa. ¿Ese "skip=5 delims=*" realmente filtra por fecha, para dejar los archivos de los últimos treinta días?

¡Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Borrar carpetas también en un script

Publicado por Antoni Masana (812 intervenciones) el 04/10/2018 17:10:23
He realizado una larga explicación y se ha perdido.

Si ejecutas FOR /? desde una ventana de MSDOS podrás ver la ayuda de este comando. Todos los comandos aceptan este parametro para la ayuda.

El DIR devuelve la lista de directorios ordenado por fecha de más reciente a más viejo.
El skip=5 lo que hace es saltar las 5 primeras entradas y el delims=* es para evitar problemas con nombres con espacios

Prueba esto desde una ventana de MSDOS

1
FOR /F "skip=5 delims=*" %b IN ('DIR /O-D /AD /B') DO rcho "%b"

Si elcomado se ejecuta desde la línea de comandos va con UN solo %
Si se ejecuta desde un BAT va con DOS %.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Borrar carpetas también en un script

Publicado por anonymous (13 intervenciones) el 04/10/2018 17:38:22
Ok, perfecto. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar