Prikazi cijelu temu 17.10.2016 12:31
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Lokacija:zagreb


Predmet:Re: BAT file: promjena i vracanje lokalnog datuma
evo nakon napornog tjedna u petljanju sa batch fajlom.
Batch (BAT) file radi sljedece:
1. uzima danasnji datum, pretvara ga u julianski broj i stavlja u varijblu julDanasnjiDatum
2. postavlja zeljeni datum kao danasnji datum, pretvara ga u julianskibroj i stavlja u varijablu julPostavljeniDatum
3. pokrecem program
4. nakon izlaska iz programa, moguce da je proslo pola noci i datum se uvecao za jedan dan. Mogao sam to ispitati i dodati samo jedan dan ali ima nekih ljudi ostave pc upaljen i po nekoliko dana. Htio sam da tocno se izracuna broj dana provedenih sa postavljenim datumom pa sam ...
5. pretvorio trenutni datum u julianskibroj i stavio u varijablu julTrenutniDatum
6. oduzimanjem julTrenutniDatum i julPostavljeniDatum dobijemo razliku u danima koju stavljamo u varijablu razlikaDana
7. dodajemo razlikaDana na julDanasnjiDatum (datum prije pokretanja programa)
8. pretvaramo julDanasnjiDatum u gregorijanski kalendar

PreuzmiIzvorni kôd (Text):
  1. echo off
  2. CLS
  3. SETLOCAL
  4.  
  5. REM danasnjiDatum=DATE
  6. SET danasnjiDatum=%date:~4,2%-%date:~7,2%-%date:~10,4%
  7. echo DANASNJI DATUM:  %danasnjiDatum%
  8. rem echo dan= %date:~4,2%
  9. rem echo mjesec= %date:~7,2%
  10. rem echo godina= %date:~10,4%
  11.  
  12. REM pretvori danasnjiDatum u julianski kalendar
  13. SET mm=  %date:~7,2%
  14. SET dd=%date:~4,2%
  15. SET year=%date:~10,4%
  16. CALL :convjdate
  17. SET julDanasnjiDatum=%jdate%
  18.  
  19. REM postaviDatum
  20. SET staviMjesec=7
  21. SET staviDan=14
  22. SET staviGodina=2011
  23. DATE=%staviDan%-%staviMjesec%-%staviGodina%
  24.  
  25. REM pretvori postavljenji datum u julianski
  26. SET mm=  %date:~7,2%
  27. SET dd=%date:~4,2%
  28. SET year=%date:~10,4%
  29. CALL :convjdate
  30. SET julPostavljeniDatum=%jdate%
  31.  
  32. REM pokreni program
  33. echo POSTAVLJENI DATUM PRIJE POKRETANJA PROGRAMA: %date%
  34.  
  35. echo POKRECEM PROGRAM
  36.  
  37. echo DATUM NAKON IZLASKA IZ PROGRAMA: %date%
  38.  
  39. REM pretvori trenutni datum u julijanski
  40. SET mm=  %date:~7,2%
  41. SET dd=%date:~4,2%
  42. SET year=%date:~10,4%
  43. CALL :convjdate
  44. SET julTrenutniDatum=%jdate%
  45.  
  46. REM razlika trenutnog datuma i postavljenog datuma
  47. set /a razlikaDana=%julTrenutniDatum%-%julPostavljeniDatum%
  48. echo razlika u danima je: %razlikaDana% dana
  49.  
  50. REM OVDJE JAVI GRESKU
  51.  
  52.  
  53. REM dodajem razliku dana na danasnjiDatum
  54. SET /A julNoviDatum=%julDanasnjiDatum%+%razlikaDana%
  55.  
  56. REM pretvori julNoviDatum u gregorijanski
  57. CALL :convgdate
  58. echo NOVI DANASNJI DATUM: %DD%-%MM%-%YYYY%
  59. echo POSTAVI NOVI DANASNJI DATUM
  60.  
  61. REM postavi danasnji datum na novi datum
  62. DATE=%DD%-%MM%-%YYYY%
  63. echo DANASNJI DATUM: %date%
  64. pause
  65. GOTO exit
  66.  
  67. REM POTPROGRAMI
  68.  
  69. :convjdate
  70. :: konvertira gregorijanski u julianski
  71. SET /A Month1 = ( %MM% - 14 ) / 12
  72. SET /A Year1  = %year% + 4800
  73. SET /A jdate  = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ^
  74. ( %MM% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / ^
  75. 100 ) ) / 4 + ^%DD% - 32075
  76. GOTO:EOF
  77.  
  78. :convgdate
  79. set /a L= %julNoviDatum%+68569,     N= 4*L/146097, L= L-(146097*N+3)/4, I= 4000*(L+1)/1461001
  80. set /a L= L-1461*I/4+31, J= 80*L/2447,  K= L-2447*J/80,      L= J/11
  81. set /a J= J+2-12*L,      I= 100*(N-49)+I+L
  82. set /a YYYY= I,  MM=100+J,  DD=100+K
  83. set MM=%MM:~-2%
  84. set DD=%DD:~-2%
  85.  
  86. GOTO: EOF

e sada, ovo radi ali ima jednu gresku koja se javi u redu gdje sam napisao a to je :

The system cannot find the batch label specified -

eto bas tako pise kako sam napisao. zna li netko?
zivot je moja domovina.
Ovaj post je ureden 5 puta. Posljednja izmjena 17.10.2016 12:48 od strane Avko.