Windows-Stapel: Formatiertes Datum in Variable

105

Wie speichere ich das aktuelle Datum im Format JJJJ-MM-TT in einer Variablen in einer Windows-BAT-Datei?

Unix-Shell-Analogon:

today=`date +%F`
echo $today
Maksym Polshcha
quelle
1
Mögliches Duplikat von Windows Batch Script Format Datum und Uhrzeit
Adarshr
1
adarshr, die Antwort auf diese Frage verwendet eine ziemlich schreckliche und fehleranfällige Art, damit umzugehen. Ich würde raten, es nicht zu benutzen.
Joey
Dieser Link ist hilfreich, um die folgenden Antworten zu verstehen. ss64.com/nt/for_f.html
smwikipedia
1
Teilen Sie

Antworten:

151

Sie können das aktuelle Datum auf eine länderunabhängige Weise mit abrufen

for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x

Anschließend können Sie die einzelnen Teile mit Teilzeichenfolgen extrahieren:

set today=%MyDate:~0,4%-%MyDate:~4,2%-%MyDate:~6,2%

Eine andere Möglichkeit, Variablen zu erhalten, die die einzelnen Teile enthalten, wäre:

for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x
set today=%Year%-%Month%-%Day%

Viel schöner als mit Teilzeichenfolgen herumzuspielen, auf Kosten der Verschmutzung Ihres variablen Namespace.

Wenn Sie UTC anstelle der Ortszeit benötigen, ist der Befehl mehr oder weniger derselbe:

for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do set %%x
set today=%Year%-%Month%-%Day%
Joey
quelle
1
@ user2023861 Selbst wenn ich eine Eingabeaufforderung öffne, erhalte ich zum Zeitpunkt des Aufrufs des Befehls immer das richtige Datum und die richtige Uhrzeit, nicht wenn ich die Eingabeaufforderung geöffnet habe.
ADTC
5
Beachten Sie, dass Sie, wenn Sie die obige Zeile mehrmals ausführen, nicht für jeden Aufruf ein neues Datum erhalten, da überprüft wird, ob die Variable undefiniert ist. Dies ist erforderlich, da for /fzwei Zeilen zurückgegeben werden, von denen die letztere leer ist. Sie können das lösen, indem Sie set MyDate=dazwischen verwenden. Ich denke, darüber ist user2023861 gestolpert.
Joey
1
@CharlesWood, zumindest bemühe ich mich um Robustheit in meinen eigenen Batch-Dateien, obwohl ich heutzutage häufig PowerShell verwende.
Joey
1
Variablen , die eingestellt werden sollen: Year, Month, Day, Hour, Minute, Second, Quarter, WeekInMonth,DayOfWeek
Benutzer
2
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day% ist eine ungültige Antwort: Es wird ein einstelliger Monat und Tag zurückgegeben. Wie wird eine zweistellige Linke mit einer Zeichenfolge von null Monat und Tag bis Datum aufgefüllt?
Andrus
38

Wenn Sie dies mit Standard-MS-DOS-Befehlen in einer Batch-Datei erreichen möchten, können Sie Folgendes verwenden:

FOR /F "TOKENS=1 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dd=%%A
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2,3 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET yyyy=%%C

Ich bin sicher, dass dies weiter verbessert werden kann, aber dies gibt das Datum in 3 Variablen für Tag (TT), Monat (MM) und Jahr (JJJJ). Sie können diese später nach Bedarf in Ihrem Batch-Skript verwenden.

SET todaysdate=%yyyy%%mm%%dd%
echo %dd%
echo %mm%
echo %yyyy%
echo %todaysdate%

Obwohl ich verstehe, dass eine Antwort auf diese Frage akzeptiert wurde, wird diese alternative Methode von vielen geschätzt, die dies ohne Verwendung der WMI-Konsole erreichen möchten. Ich hoffe, dass sie dieser Frage einen Mehrwert verleiht.

Richhallstoke
quelle
3
Ich stellte fest, dass ich dies auf einer Windows 7-Box leicht ändern musste. Die Token mussten um eins erhöht werden: ... FOR / F "TOKENS = 2,3,4 eol = / DELIMS = /" ...
Joe Johnston
1
Gleiches gilt für Win Server 2012 auf Azure
Kirill Yunussov
34

Verwenden Sie date /Tdiese Option , um das Format an der Eingabeaufforderung zu ermitteln.

Wenn das Datumsformat Thu 17/03/2016wie folgt verwendet wird:

set datestr=%date:~10,4%-%date:~7,2%-%date:~4,2%
echo %datestr%
Anup Rav
quelle
1
Dies ist die naheliegendste Antwort auf die gestellte Frage. Ein einfacher Einzeiler war alles, was ich brauchte, kein Programm.
DCookie
2
Einverstanden. Einige der Antworten hier sehen fast so aus wie "Installieren Sie MS SQL Server, stellen Sie eine Verbindung mit einem SQL Client her und führen Sie den Befehl aus SELECT CONVERT(VARCHAR(16), GETDATE(), 112)".
Isapir
2
Die Datums- und %date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
Uhrzeitangabe
3
Der Grund dafür, dass die anderen Antworten wie ein Programm aussehen, ist, dass diese Antwort, obwohl einfach, fehlschlägt, wenn Ihre regionalen Windows-Einstellungen nicht so konfiguriert sind, wie es dieser Code erwartet (dh dieser Code funktioniert nicht auf jedem Windows-System)
Daniel Scott
20

Zwei weitere Möglichkeiten, die nicht von den Zeiteinstellungen abhängen (beide stammen aus Wie Daten / Zeit unabhängig von der Lokalisierung erhalten werden ). Und beide erhalten auch den Wochentag und keiner von ihnen benötigt Administratorrechte!:

  1. MAKECAB - funktioniert auf JEDEM Windows-System (schnell, erstellt jedoch eine kleine temporäre Datei) (das foxidrive-Skript):

    @echo off
    pushd "%temp%"
    makecab /D RptFileName=~.rpt /D InfFileName=~.inf /f nul >nul
    for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
        set "current-date=%%e-%%b-%%c"
        set "current-time=%%d"
        set "weekday=%%a"
    )
    del ~.*
    popd
    echo %weekday% %current-date% %current-time%
    pause
    
  2. ROBOCOPY - Es ist kein nativer Befehl für Windows XP und Windows Server 2003 , kann jedoch von der Microsoft-Website heruntergeladen werden . Aber es ist in alles von Windows Vista und höher integriert:

    @echo off
    setlocal
    for /f "skip=8 tokens=2,3,4,5,6,7,8 delims=: " %%D in ('robocopy /l * \ \ /ns /nc /ndl /nfl /np /njh /XF * /XD *') do (
        set "dow=%%D"
        set "month=%%E"
        set "day=%%F"
        set "HH=%%G"
        set "MM=%%H"
        set "SS=%%I"
        set "year=%%J"
    )
    
    echo Day of the week: %dow%
    echo Day of the month : %day%
    echo Month : %month%
    echo hour : %HH%
    echo minutes : %MM%
    echo seconds : %SS%
    echo year : %year%
    endlocal
    

    Und drei weitere Möglichkeiten, die andere Windows-Skriptsprachen verwenden. Sie geben Ihnen mehr Flexibilität, z. B. können Sie die Woche des Jahres, die Zeit in Millisekunden usw. abrufen.

  3. JScript / BATCH- Hybrid (muss gespeichert werden als .bat). JScript ist auf jedem System ab Windows NT und höher als Teil von Windows Script Host verfügbar ( kann jedoch in seltenen Fällen über die Registrierung deaktiviert werden ):

    @if (@X)==(@Y) @end /* ---Harmless hybrid line that begins a JScript comment
    
    @echo off
    cscript //E:JScript //nologo "%~f0"
    exit /b 0
    *------------------------------------------------------------------------------*/
    
    function GetCurrentDate() {
        // Today date time which will used to set as default date.
        var todayDate = new Date();
        todayDate = todayDate.getFullYear() + "-" +
                       ("0" + (todayDate.getMonth() + 1)).slice(-2) + "-" +
                       ("0" + todayDate.getDate()).slice(-2) + " " + ("0" + todayDate.getHours()).slice(-2) + ":" +
                       ("0" + todayDate.getMinutes()).slice(-2);
    
        return todayDate;
    }
    
    WScript.Echo(GetCurrentDate());
    
  4. VBScript / BATCH- Hybrid ( Ist es möglich, VBScript in eine Batch-Datei einzubetten und auszuführen, ohne eine temporäre Datei zu verwenden? ) Der gleiche Fall wie bei jscript, aber die Hybridisierung ist nicht so perfekt:

    :sub echo(str) :end sub
    echo off
    '>nul 2>&1|| copy /Y %windir%\System32\doskey.exe %windir%\System32\'.exe >nul
    '& echo current date:
    '& cscript /nologo /E:vbscript "%~f0"
    '& exit /b
    
    '0 = vbGeneralDate - Default. Returns date: mm/dd/yy and time if specified: hh:mm:ss PM/AM.
    '1 = vbLongDate - Returns date: weekday, monthname, year
    '2 = vbShortDate - Returns date: mm/dd/yy
    '3 = vbLongTime - Returns time: hh:mm:ss PM/AM
    '4 = vbShortTime - Return time: hh:mm
    
    WScript.echo  Replace(FormatDateTime(Date, 1), ", ", "-")
    
  5. PowerShell - kann auf jedem Computer mit .NET installiert werden - Download von Microsoft ( v1 , v2 und v3 (nur für Windows 7 und höher)). Standardmäßig unter Windows 7 / Win2008 und höher installiert:

    C:\> powershell get-date -format "{dd-MMM-yyyy HH:mm}"
    
  6. Selbst kompiliertes jscript.net/batch (Ich habe noch nie einen Windows-Computer ohne .NET gesehen, daher denke ich, dass dies ein ziemlich portables Gerät ist):

    @if (@X)==(@Y) @end /****** silent line that start jscript comment ******
    
    @echo off
    ::::::::::::::::::::::::::::::::::::
    :::       Compile the script    ::::
    ::::::::::::::::::::::::::::::::::::
    setlocal
    if exist "%~n0.exe" goto :skip_compilation
    
    set "frm=%SystemRoot%\Microsoft.NET\Framework\"
    :: searching the latest installed .net framework
    for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
        if exist "%%v\jsc.exe" (
            rem :: the javascript.net compiler
            set "jsc=%%~dpsnfxv\jsc.exe"
            goto :break_loop
        )
    )
    echo jsc.exe not found && exit /b 0
    :break_loop
    
    
    call %jsc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
    ::::::::::::::::::::::::::::::::::::
    :::       End of compilation    ::::
    ::::::::::::::::::::::::::::::::::::
    :skip_compilation
    
    "%~n0.exe"
    
    exit /b 0
    
    
    ****** End of JScript comment ******/
    import System;
    import System.IO;
    
    var dt=DateTime.Now;
    Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss"));
    
  7. Logman Dies kann nicht das Jahr und den Tag der Woche abrufen . Es ist vergleichsweise langsam, erstellt auch eine temporäre Datei und basiert auf den Zeitstempeln, die logman auf seine Protokolldateien legt. Funktioniert unter Windows XP und höher. Es wird wahrscheinlich nie von irgendjemandem benutzt werden - auch nicht von mir - aber es ist eine weitere Möglichkeit ...

    @echo off
    setlocal
    del /q /f %temp%\timestampfile_*
    
    Logman.exe stop ts-CPU 1>nul 2>&1
    Logman.exe delete ts-CPU 1>nul 2>&1
    
    Logman.exe create counter ts-CPU  -sc 2 -v mmddhhmm -max 250 -c "\Processor(_Total)\%% Processor Time" -o %temp%\timestampfile_ >nul
    Logman.exe start ts-CPU 1>nul 2>&1
    
    Logman.exe stop ts-CPU >nul 2>&1
    Logman.exe delete ts-CPU >nul 2>&1
    for /f "tokens=2 delims=_." %%t in  ('dir /b %temp%\timestampfile_*^&del /q/f %temp%\timestampfile_*') do set timestamp=%%t
    
    echo %timestamp%
    echo MM: %timestamp:~0,2%
    echo dd: %timestamp:~2,2%
    echo hh: %timestamp:~4,2%
    echo mm: %timestamp:~6,2%
    
    endlocal
    exit /b 0
    

Weitere Informationen zur Get-Date-Funktion .


npocmaka
quelle
8

Ich mochte Joeys Methode wirklich, aber ich dachte, ich würde sie ein bisschen erweitern.

Bei diesem Ansatz können Sie den Code mehrmals ausführen, ohne sich Gedanken über den alten Datumswert machen zu müssen, da dieser bereits definiert ist.

Jedes Mal, wenn Sie diese Batchdatei ausführen, wird eine ISO 8601-kompatible kombinierte Datums- und Zeitdarstellung ausgegeben.

FOR /F "skip=1" %%D IN ('WMIC OS GET LocalDateTime') DO (SET LIDATE=%%D & GOTO :GOT_LIDATE)
:GOT_LIDATE
SET DATETIME=%LIDATE:~0,4%-%LIDATE:~4,2%-%LIDATE:~6,2%T%LIDATE:~8,2%:%LIDATE:~10,2%:%LIDATE:~12,2%
ECHO %DATETIME%

In dieser Version müssen Sie darauf achten, dass Sie denselben Code nicht an mehreren Stellen in der Datei kopieren / einfügen, da dies zu doppelten Beschriftungen führen würde. Sie können entweder für jede Kopie ein separates Etikett haben oder diesen Code einfach in eine eigene Batchdatei einfügen und ihn bei Bedarf aus Ihrer Quelldatei aufrufen.

Erdferkel
quelle
5

Verwenden Sie einfach die %date%Variable:

echo %date%
ProVi
quelle
5
Dadurch wird das Datum in dem aktuell konfigurierten Kurzdatumsformat zurückgegeben. Dies ist selten ISO-8601.
Joey
@ Joey Einverstanden - Ich bin hier, weil dies nicht gut genug ist, um sich darauf zu verlassen.
SteveCinq
5

Laut Antwort von @ProVi ändern Sie einfach die gewünschte Formatierung

echo %DATE:~10,4%-%DATE:~7,2%-%DATE:~4,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%

wird zurückkehren

yyyy-MM-dd hh:mm:ss
2015-09-15 18:36:11

EDIT Wie pro @Jeb Kommentar, der korrekt ist das obige Zeitformat funktioniert nur, wenn Ihr DATE / T Befehl gibt

ddd dd/mm/yyyy
Thu 17/09/2015

Es ist jedoch einfach zu bearbeiten, um es an Ihr Gebietsschema anzupassen. Mithilfe der Indizierung jedes Zeichens in der Zeichenfolge, die von der entsprechenden Umgebungsvariablen% DATE% zurückgegeben wird, können Sie die Teile der Zeichenfolge extrahieren, die Sie benötigen.

z.B. Die Verwendung von% DATE ~ 10,4% würde die Umgebungsvariable DATE erweitern und dann nur die 4 Zeichen verwenden, die am 11. Zeichen (Versatz 10) des erweiterten Ergebnisses beginnen

Wenn Sie beispielsweise Daten im US-Stil verwenden, gilt Folgendes

ddd mm/dd/yyyy
Thu 09/17/2015

echo %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%
2015-09-17 18:36:11
Kennzeichen
quelle
Es ist nur eine Lösung für einige Leute, da dies nur an einigen Orten auf der Welt funktioniert, abhängig von Ihren Datums- / Zeitformateinstellungen
jeb
3

Ich setze eine Umgebungsvariable auf den Wert im gewünschten numerischen Format, indem ich Folgendes tue:

FOR /F "tokens=1,2,3,4 delims=/ " %a IN ('echo %date%') DO set DateRun=%d-%b-%c
Wille
quelle
2

Überprüfen Sie dieses ..

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%-%MS%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Bhaskara Arani
quelle
2

Wenn Sie Python installiert haben, können Sie dies tun

python -c "import datetime;print(datetime.date.today().strftime('%Y-%m-%d'))"

Sie können die Formatzeichenfolge einfach an Ihre Bedürfnisse anpassen.

CodeKid
quelle
2
Inwiefern ist "Use Python" eine Antwort auf die Frage?
Ross Presser
3
auf die gleiche Weise wie mit MAKECAB, ROBOCOPY, VBSCRIPT, POWERSHELL Logman und anderen Vorschlägen, die Sie hier über die Befehlszeile aufrufen können?
CodeKid
Dies kann vereinfacht werden python -c "import datetime;print(datetime.date.today())", da die __str__Methode der dateKlasse nur aufruft isoformat().
Onewhaleid
2

Es ist möglich, PowerShell zu verwenden und seine Ausgabe mithilfe einer Schleife in eine Umgebungsvariable umzuleiten.

Über die Befehlszeile ( cmd):

for /f "tokens=*" %a in ('powershell get-date -format "{yyyy-MM-dd+HH:mm}"') do set td=%a

echo %td%
2016-25-02+17:25

In einer Batchdatei können Sie %aals %%a:

for /f "tokens=*" %%a in ('powershell get-date -format "{yyyy-MM-dd+HH:mm}"') do set td=%%a
user103004
quelle
1
Sollte die Maske FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a so sein, verwenden Sie das obere MM für Monat und Backslash, um wörtliche Zeichen zu umgehen.
Wen
1

Aufgrund des Datums- und Zeitformats handelt es sich um ortsspezifische Informationen. Das Abrufen aus den Variablen% date% und% time% erfordert zusätzlichen Aufwand, um die Zeichenfolge unter Berücksichtigung der Formattransformation zu analysieren. Eine gute Idee ist es, eine API zu verwenden, um die Datenstruktur abzurufen und nach Ihren Wünschen zu analysieren. WMIC ist eine gute Wahl. Im folgenden Beispiel verwenden Sie Win32_LocalTime . Sie können auch Win32_CurrentTime oder Win32_UTCTime verwenden .

@echo off  
SETLOCAL ENABLEDELAYEDEXPANSION  
for /f %%x in ('wmic path Win32_LocalTime get /format:list ^| findstr "="') do set %%x  
set yyyy=0000%Year%  
set mmmm=0000%Month%  
set dd=00%Day%  
set hh=00%Hour%  
set mm=00%Minute%  
set ss=00%Second%  
set ts=!yyyy:~-4!-!mmmm:~-2!-!dd:~-2!_!hh:~-2!:!mm:~-2!:!ss:~-2!  
echo %ts%  
ENDLOCAL  

Ergebnis:
2018-04-25_10: 03: 11

Ivellios
quelle
1

Dies ist eine Erweiterung von Joeys Antwort, um die Zeit einzuschließen und die Teile mit Nullen aufzufüllen.

Das Ergebnis ist beispielsweise 2019-06-01_17-25-36. Beachten Sie auch, dass dies die UTC-Zeit ist.

  for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do set %%x

  set Month=0%Month%
  set Month=%Month:~-2%
  set Day=0%Day%
  set Day=%Day:~-2%
  set Hour=0%Hour%
  set Hour=%Hour:~-2%
  set Minute=0%Minute%
  set Minute=%Minute:~-2%
  set Second=0%Second%
  set Second=%Second:~-2%

  set TimeStamp=%Year%-%Month%-%Day%_%Hour%-%Minute%-%Second%
Datchung
quelle
0
echo %DATE:~10,4%%DATE:~7,2%%DATE:~4,2% 
Hillmee Bob
quelle
für Ausgabe wie diese 20160711
Hillmee Bob
0

Ich benutze folgendes:

set iso_date=%date:~6,4%-%date:~3,2%-%date:~0,2%

Oder in Kombination mit einem Protokolldateinamen 'MyLogFileName':

set log_file=%date:~6,4%-%date:~3,2%-%date:~0,2%-MyLogFileName
Chris
quelle
2
Aber wo ist deine Antwort anders oder besser als die anderen 16? Und es gibt bereits genug Hinweise, dass diese Lösung nur für Ihre Lokalisierung
funktioniert
0

Wenn Powershell verfügbar ist, können Sie die folgenden Codes verwenden:

# get date
$BuildDate=(get-date -format "yyMMdd")
echo BuildDate=$BuildDate

# get time
$BuildTime=(get-date -format "hhmmss")
echo BuildTime=$BuildTime

Hier ist das Ergebnis:

BuildDate=200518
BuildTime=115919
吴新茂
quelle
-2

Wenn Ihnen eine einmalige Investition von 10 bis 30 Minuten nichts ausmacht, um eine zuverlässige Lösung zu erhalten (die nicht von den Regionseinstellungen von Windows abhängt), lesen Sie bitte weiter.

Befreien wir unseren Geist. Möchten Sie die Skripte so vereinfachen, dass sie einfach so aussehen? (Angenommen, Sie möchten die Variable LOG_DATETIME festlegen.)

FOR /F "tokens=* USEBACKQ" %%F IN (`FormatNow "yyyy-MM-dd"`) DO (
  Set LOG_DATETIME=%%F
)

echo I am going to write log to Testing_%LOG_DATETIME%.log

Sie können. Erstellen Sie einfach eine FormatNow.exe mit C # .NET und fügen Sie sie Ihrem PATH hinzu.

Anmerkungen:

  1. Sie können eine beliebige Visual Studio-Edition wie Visual Studio Express verwenden, um die FormatNow.exe zu erstellen.
  2. Wählen Sie in Visual Studio das C # -Projekt "Konsolenanwendung" und nicht das Projekt "Windows Forms-Anwendung".
  3. Gesunder Menschenverstand: Die erstellte FormatNow.exe benötigt zum Ausführen .NET Framework.
  4. Gesunder Menschenverstand: Nach dem Hinzufügen von FormatNow.exe zur PATH-Variablen müssen Sie CMD neu starten, damit es wirksam wird. Dies gilt auch für Änderungen von Umgebungsvariablen.

Leistungen:

  1. Es ist nicht langsam (endet innerhalb von 0,2 Sekunden).
  2. Viele Formate werden unterstützt: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx zB FormatNow "ddd", um nur den Wochentag zu erhalten, FormatNow "yyyy", um nur zu erhalten das Jahr
  3. Es hängt nicht von den Regionseinstellungen von Windows ab, daher ist die Ausgabe viel zuverlässiger. Andererseits gibt% date% kein konsistentes Format für verschiedene Computer an und ist nicht zuverlässig.
  4. Sie müssen nicht so viele CMD-Variablen erstellen und den Variablennamensraum verschmutzen.
  5. Es würde 3 Zeilen im Batch-Skript erfordern, um das Programm aufzurufen und die Ergebnisse zu erhalten. Es sollte einigermaßen kurz genug sein.

Quellcode von FormatNow.exe, den ich mit Visual Studio 2010 erstellt habe (ich ziehe es vor, ihn selbst zu erstellen, um das Risiko des Herunterladens eines unbekannten, möglicherweise schädlichen Programms zu vermeiden). Kopieren Sie einfach die folgenden Codes und fügen Sie sie ein, erstellen Sie das Programm einmal und Sie haben einen zuverlässigen Datumsformatierer für alle zukünftigen Verwendungen.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace FormatNow
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length < 1)
                {
                    throw new ArgumentException("Missing format");
                }
                string format = args[0];
                Console.Write(DateTime.Now.ToString(format, CultureInfo.InvariantCulture.DateTimeFormat));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

    }
}

Wenn es um komplizierte Logiken geht, können wir dies im Allgemeinen vereinfachen, indem wir ein sehr kleines Programm erstellen und das Programm aufrufen, um die Ausgabe stattdessen in einer Batch-Skriptvariablen zu erfassen. Wir sind keine Studenten und legen keine Prüfungen ab, bei denen wir die Batch-Script-Only-Regel befolgen müssen, um Probleme zu lösen. In einer realen Arbeitsumgebung ist jede (legale) Methode zulässig. Warum sollten wir uns immer noch an die schlechten Funktionen des Windows-Batch-Skripts halten, das Problemumgehungen für viele einfache Aufgaben erfordert? Warum sollten wir das falsche Werkzeug für den Job verwenden?

sken130
quelle