Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник на возврат даты

Ответить
Настройки темы
CMD/BAT - [решено] Батник на возврат даты

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Написал такой батник(кое что взял из предыдущих примеров) и никак не могу заставить его работать как надо:
Код: Выделить весь код
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' ????
Помогите разобраться что тут за магия

Отправлено: 20:54, 13-05-2012

 

Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:18, 13-05-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Исправил вот так, вроде пока работает
читать дальше »
Код: Выделить весь код
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%

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

Отправлено: 21:48, 13-05-2012 | #3


Пользователь


Сообщения: 102
Благодарности: 8

Профиль | Отправить PM | Цитировать


строчек конечно побольше, но и решено по другому:
читать дальше »
@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

Отправлено: 06:49, 14-05-2012 | #4


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


borgulio, советую использовать более подходящий для решения таких задач инструмент: средства VBScript/JScript.
На VBS, например, решение выглядит так:
Код: Выделить весь код
WScript.Echo DateAdd("d", -4, Date)

Последний раз редактировалось DmitriiV, 14-05-2012 в 11:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:56, 14-05-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник на возврат даты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - батник для проверки даты последнего изменения папки alex_dmn Скриптовые языки администрирования Windows 2 15-02-2011 20:32
FreeBSD - [решено] Возврат к удаленному tty lsync Общий по FreeBSD 9 28-11-2009 21:55
Разное - Возврат XP Home OEM kracken Лицензирование продуктов Microsoft 6 04-06-2009 13:55
Разное - Возврат ПО djeff Лицензирование продуктов Microsoft 6 17-04-2009 11:37
[решено] Возврат DC в домен Jekael Microsoft Windows NT/2000/2003 10 26-11-2007 10:34




 
Переход