Ms-Dos - PROBLEMA FECHA DESPUES DIA 8

 
Vista:
sin imagen de perfil

PROBLEMA FECHA DESPUES DIA 8

Publicado por JHON JAIRO (3 intervenciones) el 09/05/2014 16:37:57
HOLA ESPERO ME PUEDAN AYUDAR

TENGO UN CODIGO QUE ESTOY EMPEZANDO A REALIZAR, ME ESCRIBE UN ARCHIVO DE TEXTO CON FECHAS DE LOS ULTIMOS 90 DIAS, ANTES DEL DIA 8 DEL MES CORRESPONDIENTE ME GENERA LAS FECHAS DEL MES ACTUAL CORRECTAMENTE, PERO CUANDO PASA DEL DIA 8 ME GENERA HASTA EL DIA 31 DEL ANTERIOR MES.

ESTE ES EL CODIGO :

set d=%date:~0,2%
set da=%date:~0,2%
set m=%date:~3,2%
set a=%date:~6,4%
set mesant=%date:~3,2%
set dia=%date:~6,4%/%mesant%/%d%

set /A mesant=mesant-0

echO off >W:\LABW\ACTUAL\CAMPOS3.TXT

echo %dia% >> W:\LABW\ACTUAL\CAMPOS3.TXT

:menorm
if %d% GEQ 1 (
set diat=%date:~6,4%/%mesant%/%d%
echo %diat% >> W:\LABW\ACTUAL\CAMPOS3.TXT
set/A d=d-1
goto menorm
)

set /A mesant=mesant-1
set /A dma=31

:menordma
if %dma% GEQ 1 (
set diat=%date:~6,4%/%mesant%/%dma%
echo %diat% >> W:\LABW\ACTUAL\CAMPOS3.TXT
set/A dma=dma-1
goto menordma
)

set /A mesant=mesant-1
set /A dmaa=31

:menordmaa
if %dmaa% GEQ 1 (
set diat=%date:~6,4%/%mesant%/%dmaa%
echo %diat% >> W:\LABW\ACTUAL\CAMPOS3.TXT
set/A dmaa=dmaa-1
goto menordmaa
)

set /A mesant=mesant-1
set /A dmaaa=31

:menordmaaa
if %dmaaa% GEQ %da% (
set diat=%date:~6,4%/%mesant%/%dmaaa%
echo %diat% >> W:\LABW\ACTUAL\CAMPOS3.TXT
set/A dmaaa=dmaaa-1
goto menordmaaa
)

POR FAVOR ALGUIEN QUE ME COLABORE..
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

PROBLEMA FECHA DESPUES DIA 8

Publicado por Antoni Masana (811 intervenciones) el 12/05/2014 08:09:50
Te he realizado algunos cambios o mejoras, de todos formas NO esta bien y culpa de esto lo tiene el propio lenguaje.

El SET tiene muy mala folla, es decir el tipo que programo este comando debía odiar a todos los programadores del mundo mundial.

El SET esta peleado con el FOR, con el IF y por porque no hay más comandos con los que interactuar por que no hace lo que se espera que haga.

Por otro lado el proceso que haces es un poco rebuscado o rocambolesco

Ver más abajo

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
@echo offx
 
set File=W:\LABW\ACTUAL\CAMPOS3.TXT
 
set d=%date:~0,2%
set da=%date:~0,2%
set m=%date:~3,2%
set a=%date:~6,4%
set mesant=%date:~3,2%
set dia=%date:~6,4%/%mesant%/%d%
 
set /A mesant=%mesant%-0
if %mesant% LSS 10 set mesant=0%mesant%
 
type nul >%File%
 
echo %dia% >> %File%
 
:menorm
   if %d% GEQ 1 (
      set diat=%date:~6,4%/%mesant%/%d%
      echo %diat% >> %File%
      set/A d=%d%-1
      if %d% LSS 10 set d=0%d%
      goto menorm
   )
 
   set /A mesant=%mesant%-1
   if %mesant% LSS 10 set mesant=0%mesant%
 
                   set dma=31
   if %mesant% == 02 set dma=28
   if %mesant% == 04 set dma=30
   if %mesant% == 06 set dma=30
   if %mesant% == 09 set dma=30
   if %mesant% == 11 set dma=30
 
:menordma
   if %dma% GEQ 1 (
      set diat=%date:~6,4%/%mesant%/%dma%
      echo %diat% >> %File%
      set /A dma=%dma%-1
      if %dma% LSS 10 set dma=0%dma%
      goto menordma
   )
 
   set /A mesant=%mesant%-1
   if %mesant% LSS 10 set mesant=0%mesant%
 
                     set dma=31
   if %mesant% == 02 set dma=28
   if %mesant% == 04 set dma=30
   if %mesant% == 06 set dma=30
   if %mesant% == 09 set dma=30
   if %mesant% == 11 set dma=30
 
:menordmaa
   if %dmaa% GEQ 1 (
      set diat=%date:~6,4%/%mesant%/%dmaa%
      echo %diat% >> %File%
      set/A dmaa=%dmaa%-1
      if %dmaa%   LSS 10 set dmaa=0%dmaa%
      goto menordmaa
   )
 
   set /A mesant=%mesant%-1
   if %mesant% LSS 10 set mesant=0%mesant%
 
                     set dma=31
   if %mesant% == 02 set dma=28
   if %mesant% == 04 set dma=30
   if %mesant% == 06 set dma=30
   if %mesant% == 09 set dma=30
   if %mesant% == 11 set dma=30
 
:menordmaaa
   if %dmaaa% GEQ %da% (
      set diat=%date:~6,4%/%mesant%/%dmaaa%
      echo %diat% >> %File%
      set/A dmaaa=%dmaaa%-1
      if %dmaaa%  LSS 10 set dmaaa=0%dmaaa%
      goto menordmaaa
   )

Este es un poco más simple y se controla mucho mejor. Falta una cosa y es controlar los años bisiestos, pero este es otro problema

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
@echo off
 
set File=W:\LABW\ACTUAL\CAMPOS3.TXT
 
set dd=%date:~0,2%
set mm=%date:~3,2%
set aa=%date:~6,4%
set Num=90
 
type nul >%File%
 
:Inicio
                  set x_dd=%dd%
                  set x_mm=%mm%
   if %dd% LSS 10 set x_dd=0%dd:~-1%
   if %mm% LSS 10 set x_mm=0%mm:~-1%
 
   echo %aa%/%x_mm%/%x_dd% >> %File%
 
   set /A Num=%Num%-1
   set /A dd=%dd%-1
 
   if %dd% ==  0  set /a mm=%mm%-1
   if %mm% ==  0  set /a aa=%aa%-1
 
                 set FinMes=31
   if %mm% ==  2 set FinMes=28
   if %mm% ==  4 set FinMes=30
   if %mm% ==  6 set FinMes=30
   if %mm% ==  9 set FinMes=30
   if %mm% == 11 set FinMes=30
 
   if %dd% == 0 set dd=%FinMes%
 
   if %Num% GTR 0 goto Inicio



Como verificar si un año es bisiesto

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
@echo off
 
set aa=2010
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2011
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2012
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2013
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2014
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2015
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2016
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2017
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto
 
set aa=2018
set /A bi=aa*100/4
if %bi:~-2% == 00 echo %aa% - Bisiesto


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

PROBLEMA FECHA DESPUES DIA 8

Publicado por Antoni Masana (811 intervenciones) el 13/05/2014 13:15:41
Hay un problema con el SET, ¿otro más? que raro, cuando el valor empieza por 08 cree que es exadecimal y no funciona bien.

He realizado unos pequeños cambios

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
@echo off
 
set File=W:\LABW\ACTUAL\CAMPOS3.TXT
 
set /A dd=100+%date:~0,2%
set /A mm=100+%date:~3,2%
set    aa=%date:~6,4%
set    Num=90
 
type nul >%File%
 
:Inicio
   echo %Num% - %aa%/%mm:~-2%/%dd:~-2% >> %File%
 
   set /A Num=%Num%-1
   set /A dd=%dd%-1
 
   if %dd% == 100  set /a mm=%mm%-1
   if %mm% == 100  set /a aa=%aa%-1
 
                  set FinMes=131
   if %mm% == 102 set FinMes=128
   if %mm% == 104 set FinMes=130
   if %mm% == 106 set FinMes=130
   if %mm% == 109 set FinMes=130
   if %mm% == 111 set FinMes=130
 
   if %dd% == 100 set dd=%FinMes%
 
   if %Num% GTR 0 goto Inicio

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

PROBLEMA FECHA DESPUES DIA 8

Publicado por jhon jairo (3 intervenciones) el 19/05/2014 05:49:21
Muchas gracias por las correcciones, bien Mi conocimiento en Batch es bajo y apenas lo estoy empezando a Interactuar, y el problema que tenia era cuando empezaba por 08.

Con seguridad seguire sus concejos


JHON JAIRO
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