Показать полную графическую версию : Неправильно работает батник в 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-ти значное число, что это может быть ?
Возможно, это связано с другим форматом даты в переменной %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
Возможно, это связано с другим форматом даты в переменной %DATE% »
Да, дело именно в этом, на других машинах: 04.06.2013
А на сервере 2012: 04-Jun-2013
Как лучше поменять вид даты в настройках сервера или можно как то переписать этот код ?
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
Проверить не на чем, но, по-моему, работает.
Проверил, сегодня среда, т.е. должна быть цифра 3, выдает 5
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.