Привет Не уверен, что кто-нибудь может мне помочь.
Как я могу преобразовать текущую дату в номер недели в пакетном сценарии?
Я знаю только, как генерировать текущую дату с моего компьютера. %ДАТА%
например. 16.03.2017 - 11 неделя.
Привет Не уверен, что кто-нибудь может мне помочь.
Как я могу преобразовать текущую дату в номер недели в пакетном сценарии?
Я знаю только, как генерировать текущую дату с моего компьютера. %ДАТА%
например. 16.03.2017 - 11 неделя.
В качестве альтернативы вызовите Powershell из пакетного файла с помощью простого однострочного кода:
@for /f %%a in ('powershell.exe get-date -UFormat %%V') do @set WeekInYear=%%a
powershell.exe
размером 470 КБ, поэтому для получения нужно несколько секунд (6,96 секунды в моем тесте). тот же результат, который достигается сразу любым другим методом! Совет может быть таким: не используйте PowerShell для простых одноразовых вычислений, подобных этому...
- person Aacini; 16.03.2017
используйте это:
@echo off
set "weekn="
for /f %%W in (
'mshta vbscript:Execute("createobject(""scripting.filesystemobject"").GetStandardStream(1).writeline(DatePart(""ww"",Now()))"^^^&close^)'
) do @(
set "weekn=%%W"
)
echo %weekn%
mshta
— это встроенный инструмент, который может открывать html
файлы (а также скрипты там имеют доступ к файловой системе) с mshta vbscript:..
или mshta javascript:...
вы можете внедрить исполняемый код в его заголовок. Хотя обычно требуются неприятные escape-последовательности и запись в консоль не так проста (требуется GetStandardStream(1)
и допустимый канал), это удобно для коротких выражений.
- person npocmaka; 16.03.2017
now = new Date(); onejan = new Date(now.getFullYear(), 0, 1); week = Math.ceil( (((now - onejan) / 86400000) + onejan.getDay() + 1) / 7 )
- person Aacini; 16.03.2017
Math.floor(Math.floor(((new Date())-(new Date((new Date()).getFullYear(), 0, 0)))/(1000 * 60 * 60 * 24))/7+1);
- person npocmaka; 16.03.2017
@if (@Dummy == @Dummy) @then @cscript //Nologo //E:JSCRIPT "%~dpnx0" %* & @goto :eof @end now=new Date();jan1=new Date(now.getFullYear(),0,1);WScript.Echo(Math.ceil((((now-jan1)/86400000)+jan1.getDay()+1)/7));
- person Filipus; 02.05.2017
Чистое пакетное решение. Кредит Ричи Лоуренсу
@echo off & setlocal ENABLEEXTENSIONS
call :DateToWeek 2017 03 16 yn cw dw
echo/Today (in ISO 8601 Week Date format) is: %yn%-W%cw%-%dw%
pause
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToWeek %yy% %mm% %dd% yn cw dw
::
:: By: Ritchie Lawrence, Updated 2002-11-20. Version 1.1
::
:: Func: Returns an ISO 8601 Week date from a calendar date.
:: For NT4/2000/XP/2003.
::
:: Args: %1 year component to be converted, 2 or 4 digits (by val)
:: %2 month component to be converted, leading zero ok (by val)
:: %3 day of month to be converted, leading zero ok (by val)
:: %4 var to receive year, 4 digits (by ref)
:: %5 var to receive calendar week, 2 digits, 01 to 53 (by ref)
:: %6 var to receive day of week, 1 digit, 1 to 7 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
if %cw% LSS 10 set cw=0%cw%
endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%&goto :EOF