PDA

Показать полную графическую версию : Неправильно работает батник в Windows Server 2012


foma24
04-06-2013, 16:27
Добрый день. Есть батник, в котором задается переменная %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
Возможно, это связано с другим форматом даты в переменной %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
Возможно, это связано с другим форматом даты в переменной %DATE% »

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

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

Georgio
04-06-2013, 21:41
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
Проверил, сегодня среда, т.е. должна быть цифра 3, выдает 5




© OSzone.net 2001-2012