Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Батник на возврат даты (http://forum.oszone.net/showthread.php?t=234568)

borgulio 13-05-2012 20:54 1915299

Батник на возврат даты
 
Написал такой батник(кое что взял из предыдущих примеров) и никак не могу заставить его работать как надо:
Код:

set /a today = 1%date:~,2%
set /a tomonth = 1%date:~3,2%
set /a toyear = %date:~6,4%
set /a yearcheck = %toyear%/4*4
set $MD=31 31 28 31 30 31 30 31 31 30 31 30
if %toyear% EQU %yearcheck% set $MD=31 31 29 31 30 31 30 31 31 30 31 30
for /F "Tokens=%tomonth:~1% Delims= " %%i In ("%$MD%") Do Set /A dayz=%%i
set /a newday = %today% - 104
if %newday% LEQ 0 set /a newmonth = %tomonth:~1% - 1
if %newday% GEQ 1 set /a newmonth = %tomonth:~1%
set /a newyear = %toyear%
if %newmonth% EQU 0 set /a newyear = %toyear% - 1
if %newmonth% EQU 0 set /a newmonth = 12
if %newday% LEQ 0 set /a newday = %newday% + %dayz%
if %newday% LEQ 9 set /a newday = 10%newday%
if %newmonth% LEQ 9 set /a newmonth = 10%newmonth%

echo %newday:~1%.%newmonth:~1%.%newyear%

Должен выдавать дату на 4 дня раньше текущей
Сил нет уже тестить, то вроде хорошо работает, то по непонятным мне причинам выдает полную ерунду
Например сегодня 14.05.2012, должно выдать 10.05.2012, ничего подобного пишет 0.05.2012
если сделать так: if "%newday%" LEQ "9" set /a newday = 10%newday% выдает 101.05.2012
Почему он считает истиной '10 меньше 9' ????
Помогите разобраться что тут за магия

zion87 13-05-2012 21:18 1915312

У мну тоже такие глюки были, приходилось другие операторы сравнивания вставлять.......

borgulio 13-05-2012 21:48 1915345

Исправил вот так, вроде пока работает
читать дальше »
Код:

set /a today = 1%date:~,2%
set /a tomonth = 1%date:~3,2%
set /a toyear = %date:~6,4%
set /a yearcheck = %toyear%/4*4
set $MD=31 31 28 31 30 31 30 31 31 30 31 30
if %toyear% EQU %yearcheck% set $MD=31 31 29 31 30 31 30 31 31 30 31 30
for /F "Tokens=%tomonth:~1% Delims= " %%i In ("%$MD%") Do Set /A dayz=%%i
set /a newday = %today% - 104
if %newday% LEQ 0 set /a newmonth = %tomonth:~1% - 1
if %newday% GEQ 1 set /a newmonth = %tomonth:~1%
set /a newyear = %toyear%
if %newmonth% EQU 0 set /a newyear = %toyear% - 1
if %newmonth% EQU 0 set /a newmonth = 12
if %newday% LEQ 0 set /a newday = %newday% + %dayz%
if %newday% LEQ 9 set /a newday = 10%newday%
if %newmonth% LEQ 9 set /a newmonth = 10%newmonth%

if %newday% GTR 31 (
  if %newmonth% GTR 12 (
  echo %newday:~1%.%newmonth:~1%.%newyear%
  ) ELSE echo %newday:~1%.%newmonth%.%newyear%
) ELSE if %newmonth% GTR 12 (
  echo %newday%.%newmonth:~1%.%newyear%
  ) ELSE echo %newday%.%newmonth%.%newyear%


но это пока, уже было такое что работает, работает, а через пару дней опять косяк какой-нибудь вылазит.

firstarey 14-05-2012 06:49 1915492

строчек конечно побольше, но и решено по другому:
читать дальше »
@echo off
Color 0e
rem берем текущую дату:
set DD=%date:~0,2%
set DM=%date:~3,2%
set DY=%date:~6,4%
set timer=0

echo %DY%-%DM%-%DD%

if %DD%==01 set DD=%date:~1,1%
if %DD%==02 set DD=%date:~1,1%
if %DD%==03 set DD=%date:~1,1%
if %DD%==04 set DD=%date:~1,1%
if %DD%==05 set DD=%date:~1,1%
if %DD%==06 set DD=%date:~1,1%
if %DD%==07 set DD=%date:~1,1%
if %DD%==08 set DD=%date:~1,1%
if %DD%==09 set DD=%date:~1,1%

:DD_minus
rem таймер на 4 дня :)
if /i %timer%==4 goto resultat
set /a timer=%timer%+1
rem день-1
set /a DD=%DD%-1

if %DD% NEQ 0 goto DD_zero

if %DM%==01 set DM=%date:~4,1%
if %DM%==02 set DM=%date:~4,1%
if %DM%==03 set DM=%date:~4,1%
if %DM%==04 set DM=%date:~4,1%
if %DM%==05 set DM=%date:~4,1%
if %DM%==06 set DM=%date:~4,1%
if %DM%==07 set DM=%date:~4,1%
if %DM%==08 set DM=%date:~4,1%
if %DM%==09 set DM=%date:~4,1%

set /a DM=%DM%-1
if %DM%==0 (
set /a DY=%DY%-1
set DM=12
)
if %DM%==1 set DD=31
if %DM%==2 set DD=28
if %DM%==3 set DD=31
if %DM%==4 set DD=30
if %DM%==5 set DD=31
if %DM%==6 set DD=30
if %DM%==7 set DD=31
if %DM%==8 set DD=31
if %DM%==9 set DD=30
if %DM%==10 set DD=31
if %DM%==11 set DD=30
if %DM%==12 set DD=31

:DD_zero
if %DD%==9 set DD=09
if %DD%==8 set DD=08
if %DD%==7 set DD=07
if %DD%==6 set DD=06
if %DD%==5 set DD=05
if %DD%==4 set DD=04
if %DD%==3 set DD=03
if %DD%==2 set DD=02
if %DD%==1 set DD=01

if %DM%==9 set DM=09
if %DM%==8 set DM=08
if %DM%==7 set DM=07
if %DM%==6 set DM=06
if %DM%==5 set DM=05
if %DM%==4 set DM=04
if %DM%==3 set DM=03
if %DM%==2 set DM=02
if %DM%==1 set DM=01
goto DD_minus

:resultat
echo %DY%-%DM%-%DD%
pause>nul

DmitriiV 14-05-2012 07:56 1915503

borgulio, советую использовать более подходящий для решения таких задач инструмент: средства VBScript/JScript.
На VBS, например, решение выглядит так:
Код:

WScript.Echo DateAdd("d", -4, Date)


Время: 11:56.

Время: 11:56.
© OSzone.net 2001-