Ms-Dos - Batch que hace copia un archivo a un carpeta con nombre de fecha y borra las de un mes atras

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado 1 puesto en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Batch que hace copia un archivo a un carpeta con nombre de fecha y borra las de un mes atras

Publicado por Gaston (2 intervenciones) el 16/07/2019 17:26:52
Estoy haciendo un batch corre vez por semana, que crea una carpeta (AAAAMMDD actual) en un directorio y copia un archivo a misma. Además dentro directorio donde se crea la carpeta antes mencionada debe borrar las carpetas de 1 mes atrás (no es necesario que se exacto).
Lo que pensé fue hacer un FOR que recorra el directorio y si el MM es menor al MM actual y DD es menor a DD actual, borre dicha carpeta. No estoy seguro de que forma hacer este FOR o si hay alguna forma mejor de realizarlo.
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

Batch que hace copia un archivo a un carpeta con nombre de fecha y borra las de un mes atras

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 07:39:51
Puedes probar esto:

1
FORFILES /D -30 /C "cmd /c echo @fdate - @file"

Para borrar la sintaxis seria esto:

1
FORFILES /D -30 /C "cmd /c RD @file /S /Q"

Para mas información:

1
FORFILES /?

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
Val: 3
Ha aumentado 1 puesto en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Batch que hace copia un archivo a un carpeta con nombre de fecha y borra las de un mes atras

Publicado por Gaston (2 intervenciones) el 23/07/2019 16:55:53
Ante todo gracias por su respuesta, de tanto dar vueltas en el foro, de verdad esperaba que usted contestara. Probé su sugerencia (antes de esta no al no saber de su existencia, había pensado un código un poco más complejo). Para poder probarlo y como la búsqueda la hace de acuerdo a la hora de creación del archivo, fui haciendo varias carpetas cambiando la hora del sistema, pero me arroja ERROR: El sistema no puede encontrar el archivo especificado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
 
SET num_arch=%1
SET nom_madre=%2
SET fec_arch=%Date:~6,4%%Date:~-7,2%%Date:~0,2%
SET dir_cser=C:\system\doc
SET nom_arch=rgZ%num_arch%.mde
SET dir_czon=\\%nom_madre%\system\rgd
SET var_error=0
 
NET USE J: %dir_czon% /PERSISTENT:YES
 
CD %dir_cser%
MKDIR "%dir_cser%\%fec_arch%"
XCOPY "J:%nom_arch%" "%dir_cser%\%fec_arch%"
 
NET USE J: /delete /Q
 
CD %dir_cser%
 
FORFILES /D -30 /C "cmd /c RD @file /S /Q"
 
PAUSE
 
EXIT

El código que había hecho antes (pero tampoco funciona es este)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@echo off
SET num_arch=%1
SET nom_madre=%2
SET fec_arch=%Date:~6,4%%Date:~-7,2%%Date:~0,2%
SET dir_cser=C:\system\doc
SET nom_arch=rgZ%num_arch%.mde
SET dir_czon=\\%nom_madre%\system\rgd
 
NET USE J: %dir_czon% /PERSISTENT:YES
 
CD %dir_cser%
MKDIR "%dir_cser%\%fec_arch%"
XCOPY "J:%nom_arch%" "%dir_cser%\%fec_arch%"
 
NET USE J: /delete
 
CD %dir_cser%
 
for /R %dir_cser% /D %v in (*) do (
	set var_aarch=%v:~4%
	set var_march=%v:~4,2%
	SET var_darch=%V:~6,2%
	set var_aactu=%Date:~6,4%
	set var_mactu=%Date:~-7,2%
	set var_dactu=%Date:~0,2%
	if %var_aarch%<%var_aactu% (
		if %var_aarch%>%var_aactu% (
			if %var_darch%<%var_dactu%(
				RD %%v /S /Q
			)
		)
	)ELSE(
		if %var_aarch%=%var_aactu%(
			if %var_aarch%<%var_aactu% (
				if %var_darch%<%var_dactu%(
					RD %%v /S /Q
				)
			)
		)
	)
)
 
PAUSE
 
EXIT
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

Batch que hace copia un archivo a un carpeta con nombre de fecha y borra las de un mes atras

Publicado por Antoni Masana (811 intervenciones) el 24/07/2019 08:56:19
En el primer BAT que has puesto hacen falta varias cosas que tambien se tendrian que poner es este.

Otra forma de borrar los directorios guardando el último mes o los directorios de los últimos 30 días:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@echo off
 
IF "%1" == "" (
     echo Faltan parámetros el número de archivo.
     goto:EOF
    )
 
IF "%2" == "" (
     echo Faltan parámetros del destino.
     goto:EOF
    )
 
SET num_arch=%1
SET nom_madre=%2
SET fec_arch=%Date:~6,4%%Date:~-7,2%%Date:~0,2%
SET dir_cser=C:\system\doc
SET nom_arch=rgZ%num_arch%.mde
SET dir_czon=\\%nom_madre%\system\rgd
 
: ---&--- Busco una fecha de un mes atras
SET aa=%Date:~6,4%
SET mm=%Date:~-7,2%
SET dd=%Date:~0,2%
 
SET /A mm-=1
IF %mm%==0 SET /A aa=-1
IF %mm%==0 SET    mm=12
SET HOY=%aa%%mm%%dd%
 
: ---&--- Proceso
CD "%dir_cser%"
MD "%dir_cser%\%fec_arch%"
 
NET USE J: %dir_czon% /PERSISTENT:YES
    if %ErrorLevel% GTR 0 (
        echo Error en la conexion a %dir_czon%
        goto :EOF
    )
    XCOPY "J:\%nom_arch%" "%dir_cser%\%fec_arch%"
NET USE J: /delete /Q
 
:---&--- Borrar directorios
FOR /d %%a in (*) do call :Borrar %%a
PAUSE
goto:EOF
 
:Borrar
   set Dire=%1
   if %Dire% LSS %Hoy% RD %Dire% /S /Q
   goto:EOF

Para saber donde esta el error debes cambiar el ECHO OFF por un ECHO ON y para hacer una captura en el caso de que no veas la causa y poder enviarla:

Supongamos que tu BAT se llama POPO.BAT

1
C:\tmp> POPO >C\Tmp\texto.txt 2>&1


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