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

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

foma24 04-06-2013 16:27 2162121

Неправильно работает батник в Windows Server 2012
 
Добрый день. Есть батник, в котором задается переменная %i% которой присваивается значение дня недели в виде цифры (понедельник -1, вторник -2 и т.д.), задается это так:
set /a y=%date:~6,4%
set /a m=1%date:~3,2%-100
set /a d=1%date:~0,2%-100
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1

То же самое в Windows Server 2012 работает не правильно, переменной %i% присваивается 5-ти значное число, что это может быть ?

Georgio 04-06-2013 17:04 2162152

Возможно, это связано с другим форматом даты в переменной %DATE%. Проверте выполнение команды
Код:

ECHO %DATE%
.



Проверьте также такой вариант:


Код:

@ECHO OFF

FOR /F %%I IN ('DATE /T') DO SET date=%%I

set /a y=%date:~6,4%
set /a m=1%date:~3,2%-100
set /a d=1%date:~0,2%-100
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1

ECHO %i%

PAUSE>nul


foma24 04-06-2013 17:21 2162158

Цитата:

Цитата Georgio
Возможно, это связано с другим форматом даты в переменной %DATE% »

Да, дело именно в этом, на других машинах: 04.06.2013
А на сервере 2012: 04-Jun-2013

Как лучше поменять вид даты в настройках сервера или можно как то переписать этот код ?

Georgio 04-06-2013 21:41 2162339

foma24, переделал Ваш "батник" под Вашу ОС (Windows Server 2012):


Код:

@ECHO OFF

FOR /F "tokens=2 delims=-" %%I IN ("%DATE%") DO (
 SET Month=%%I
)

set /a y=%date:~7,4%

set /a d=1%date:~0,2%-100

SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%I IN (Jan01 Feb02 Mar03 Apr04 May05 Jun06 Jul07 Aug08 Sep09 Oct10 Nov11 Dec12) DO (
 SET "VAR=%%I"
 IF "!VAR:~0,-2!"=="%Month%" (
  SET /a m=!VAR:~-2!
))

set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (^^!(%y% %% 4))*(^^!((%m%-3)^&16))

set /a i=(%i%+(%m%-1)*30+2*(^^!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1

ECHO %i%

PAUSE>nul



Проверить не на чем, но, по-моему, работает.

foma24 05-06-2013 09:08 2162527

Проверил, сегодня среда, т.е. должна быть цифра 3, выдает 5


Время: 13:05.

Время: 13:05.
© OSzone.net 2001-