2017-03-16 163 views
0

嗨不確定是否有人可以幫助我。日期轉換爲週數

如何將當前日期轉換爲批處理腳本中的星期編號?

我只知道如何從我的電腦生成當前日期。 %DATE%

例如。 2017年3月16日是11周

回答

3

另外,從該批處理文件用一個簡單的一行代碼調用PowerShell的:

@for /f %%a in ('powershell.exe get-date -UFormat %%V') do @set WeekInYear=%%a 
+0

雖然PowerShell比批處理文件強大得多,這個「簡單單線程」使用了470 KB大小的'powershell.exe'文件,因此它需要幾秒__(在我的測試中爲6.96)來獲得通過任何其他方法立即獲得的相同結果!建議可能是:不要使用PowerShell進行簡單的一次性計算,比如這個... – Aacini

+0

我的SSD可能會歪曲我自己的結果,因爲在我的系統上運行該批處理的時間不到一秒鐘。但是我同意Aacini的觀點,即有時通往簡約的道路已經付出代價! – Filipus

2

使用this

@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% 
+0

它完美的作品!但for循環中的句子意味着什麼? – lcc

+0

@lcc'mshta'是內置的工具,它可以用'mshta vbscript:..'或'mshta javascript:...'打開'html'文件(也可以訪問文件系統的腳本)在其標題中注入可執行代碼。儘管通常需要令人討厭的轉義,但寫入控制檯並不容易(需要'GetStandardStream(1)'和一個有效的管道),這對於短表達式很方便。 – npocmaka

+0

你知道JScript的等價方法嗎? – Aacini

2

純批解決方案。信貸Ritchie Lawrence

@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 
+0

這種日期格式是獨立的嗎? – npocmaka