Sådan får du datetime på en internationalt agnostisk måde fra Windows-kommandolinjen?

Indlæg af Hanne Mølgaard Plasc

Problem



Fra kommandolinjen i Windows skal jeg enten ekko enten lokal eller utc dato og tid for systemet, men med dele af datetime i den rækkefølge, jeg vil have, uanset den nuværende internationaliseringsindstilling på pc'en.


Jeg har set dette relaterede spørgsmål:

Sådan får du den aktuelle datatid på Windows-kommandolinje, i et passende format til brug i et filnavn?


Tak.

Bedste reference


Hvis du ikke har noget imod at bruge en lille VBScript, kan du bruge noget som dette:


' http://classicasp.aspfaq.com/date-time-routines-manipulation/can-i-make-vbscript-format-dates-for-me.html
' Use MSSTDFMT to mimic VB's Format() function. Provides more flexibility in
' formatting dates than the VBScript FormatDateTime() function.
On Error Resume Next
    dim fmt
    dim rs

    set fmt = WScript.CreateObject("MSSTDFMT.StdDataFormat") 
    set rs = WScript.CreateObject("ADODB.Recordset") 

    rs.Fields.Append "fldExpression", 12 ' adVariant 
    rs.Open 
    rs.AddNew 


    fmt.Format = WScript.Arguments(0)

    rs("fldExpression").DataFormat = fmt 
    rs("fldExpression").Value = Now() 

    WScript.Echo rs("fldExpression").Value 

    rs.close
    set fmt = nothing
    set rs = nothing

    WScript.Quit(0)


Jeg lægger dette i en fil kaldet formatDate.vbs. Du kan derefter ringe fra kommandolinjen og passere det ønskede format:


C:>cscript //nologo formatDate.vbs "mm-dd-yyyy" 
04-02-2009 
C:>cscript //nologo formatDate.vbs "dd-mm-yyyy"
02-04-2009 
C:>cscript //nologo formatDate.vbs "dd-MMM-yy" 
02-Apr-09
C:>cscript //nologo formatDate.vbs "mm/dd/yyyy hh:mm"
04/02/2009 10:10
C:>cscript //nologo formatDate.vbs "dddddd ttttt"
Friday, April 03, 2009 6:48:57 AM
C:>cscript //nologo formatDate.vbs "General Date"
4/3/2009 6:49:53 AM


Se foruddefinerede dato/klokkeslætformater og brugerdefinerede dato/klokkeslætformater i MSDN for en komplet liste over formater, du kan bruge. [14] [15]


BEMÆRK:
MSSTDFMT-objektet afhænger af tilgængeligheden af ​​MSSTDFMT.dll, som er installeret af Visual Studio 6.0.


MSSTDFMT.dll ser ud til at være tilgængelig på Windows XP og Windows 2003-servere; Jeg kontrollerede et par maskiner, der aldrig har installeret MS Visual Studio og DLL'en var til stede.

Andre referencer 1


Sæt følgende i en fil kaldet noget som 'GetLocalTime.vbs'.


Function Pad( strText, intLen )
    Pad = Right( String( intLen, "0" ) & strText, intLen )
End Function

Dim d
d = Now
wscript.echo Pad(Year(d),4) & "-" & Pad(Month(d),2) & "-" & Pad(Day(d),2) & "T" & Pad(Hour(d),2) & ":" & Pad(Minute(d),2) & ":" & Pad(Second(d),2)


Kør med:


cscript GetLocalTime.vbs //Nologo


Disse udgange:


2009-04-02 14:22


Og kan tilpasses til at udskrive datatidsdelene i en hvilken som helst rækkefølge.

Andre referencer 2


Jeg bruger en lille variation af scriptet GetDate.cmd for at få kun datoen : [16]


@SETLOCAL
@ECHO OFF
GOTO :begin
:fixdate
IF "\%1:~0,1\%" GTR "9" SHIFT
FOR /f "skip=1 tokens=2-4 delims=(-)" \%\%g IN ('echo.^|date') DO (SET \%\%g=\%1& SET \%\%h=\%2& SET \%\%i=\%3)
GOTO :eof
:begin
FOR /f "tokens=1-4 delims=/-. " \%\%g IN ('date /t') DO (CALL :fixdate \%\%g \%\%h \%\%i \%\%j)
ECHO \%aa\%\%yy\%\%mm\%\%dd\%
ENDLOCAL


Det udnytter formatet output ved date og behandler sagen, når date /t udskriver ugedagens navn inden årets/måned/dag information. Det originale script virker imidlertid ikke korrekt, når formatstrengene er yy , mm og dd . Jeg har tilføjet en løsning, der gør scriptet til både engelsk og portugisisk systemer: på portugisisk er formatet årligt aa , så udsagnet \%aa\%\%yy\% udskriver året på \%aa\%]] og blankt ved \%yy\%, men det modsatte sker på engelske systemer.


Der er dog sikrere teknikker, der involverer parsing datoformatet fra registreringsdatabasen. [17]

Andre referencer 3


ekko off
    for/F 'tokens=1,2 *' \%\% a in ('dato/T') sæt dato=\%\% a \%\% b
    ekko\% dato\%
    sæt strMonth =\% dato: ~ 0,2\%
    sæt strDay =\% dato: ~ 3,2\%
    sæt strory =\% date: ~ 6,4\%
    sæt strMonth
    sæt strDay
    sæt strory


BTW: tog nogle kode herfra ...
http://www.computing.net/answers/dos/system-date-to-variable/3874.html[18]