2017-03-16 5 views
0

Hallo Nicht sicher, ob mir jemand helfen kann.Datum konvertieren zu Woche Nummer

Wie kann ich in einem Batch-Scripting das aktuelle Datum in die Wochennummer konvertieren?

Ich kann nur aktuelles Datum von meinem PC erzeugen. % DATE%

z. 2017.03.16 ist Woche 11

Antwort

3

Alternativ ruft Powershell aus der Batch-Datei mit einem einfachen Einzeiler:

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

Obwohl PowerShell ist _viel leistungsfähiger als Batch-Dateien_, dieser "einfache Einzeiler" verwendet die 470 KB große Datei 'powershell.exe', so dass es mehrere Sekunden dauert (6.96 in meinem Test), um das gleiche Ergebnis zu erhalten, das sofort mit einer anderen Methode erhalten wird ! Der Rat könnte sein: Verwenden Sie PowerShell nicht für einfache, einmalige Berechnungen wie diese ... – Aacini

+0

Meine SSD kann meine eigenen Ergebnisse verfälschen, da die Ausführung dieses Stapels weniger als eine Sekunde in meinem System dauert. Aber ich stimme Aacini zu, dass manchmal der Weg zur Einfachheit gekostet hat! – Filipus

2

Verwendung 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

Es funktioniert perfekt! Aber was bedeutet der Satz in der for-Schleife? – lcc

+0

@lcc 'mshta' ist ein integriertes Werkzeug, das' html' Dateien öffnen kann (und auch die Skripte dort haben Zugriff auf das Dateisystem) mit 'mshta vbscript: ..' oder 'mshta javascript: ...' Sie können inject ausführbaren Code in den Titel. Obwohl es in der Regel lästige Escape-Zeichen benötigt und das Schreiben in die Konsole nicht so einfach ist (benötigt 'GetStandardStream (1)' und eine gültige Pipe), ist es für kurze Ausdrücke praktisch. – npocmaka

+0

Kennen Sie die entsprechende Methode für JScript? – Aacini

2

reine Batch-Lösung. Guthaben zu 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

ist dieses Datumsformat unabhängig? – npocmaka