it-swarm-tr.com

Geçerli tarih saatini Windows komut satırında, bir dosya adında kullanmak için uygun bir biçimde nasıl alabilirim?

Güncelleme: Şimdi 2016 oldu. Bunun için gerçekten zorlayıcı bir neden olmadıkça, özellikle date işlevini kullanan bölgesel ayarlar sorunu nedeniyle PowerShell'i kullanacağım. Bakınız @ npocmaka'nın https://stackoverflow.com/a/19799236/8479


Geçerli tarih saatini dosya adına koyabileceğim bir biçimde almak için kullanabileceğim bir Windows komut satırı ifadesi nedir?

Bir dizini, adın bir parçası olarak geçerli tarih ve saate sahip bir arşive dönüştüren bir .bat dosyasına sahip olmak istiyorum, örneğin, Code_2008-10-14_2257.Zip. Makinenin bölgesel ayarlarından bağımsız olarak, bunu yapmamın kolay bir yolu var mı?

Tarih formatını gerçekten umursamıyorum, ideal olarak yyyy-mm-gg olurdu, ama basit olan her şey yolunda.

Şu ana kadar bu makinede bana ait olan Tue_10_14_2008_230050_91:

rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%

rem Now use the timestamp by in a new Zip file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.Zip Code

Bununla yaşayabilirim, ama biraz tuhaf görünüyor. İdeal olarak daha kısaca olur ve daha önce bahsedilen formatta olur.

Windows Server 2003 ve Windows XP Professional kullanıyorum. Bunu başarmak için ek yardımcı programlar kurmak istemiyorum (Nice tarih biçimlendirmesi yapacak bazılarının olduğunu fark etsem de).

498
Rory

Şu anki tarihi MMDDYYYY biçiminde almak içinWindows Toplu İş Dosyası (.bat) bölümüne bakın:

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime%

Saati 24 saat/askeri formatta tercih ederseniz, ikinci FOR satırını bununla değiştirebilirsiniz:

For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)

C:>.\Date.bat
2008-10-14_0642

Tarihi bölgeden gün/ay siparişinden bağımsız olarak istiyorsanız, "WMIC os GET LocalDateTime" ı kaynak olarak kullanabilirsiniz, çünkü ISO sıradadır:

@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%
echo Local date is [%ldt%]

C:> test.cmd
Yerel tarih [2012-06-19 10: 23: 47.048]

637
Jay

Bölgesel olarak bağımsız tarih saat ayrıştırma

%DATE% ve dir komutunun çıktı biçimi bölgesel olarak bağımlıdır ve bu nedenle ne güçlü ne de akıllıdır. date.exe ( UnxUtils 'nin bir parçası) herhangi bir tarih ve saat bilgisini düşünülecek biçimde sunar. Ayrıca tarih/saat bilgilerini date.exe olan herhangi bir dosyadan da çıkarabilirsiniz.

Örnekler: (bir cmd komut dosyasında% yerine %% kullanın)

date.exe +"%Y-%m-%d"
2009-12-22

date.exe +"%T"
18:55:03

date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: Herhangi bir metin

date.exe +"Text: %y/%m/%d-any text-%H.%M"
Metin: 09/12/22-herhangi bir metin-18.55

Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03" `

Referans bir dosyadan tarih/saat bilgisi:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

Yıl, ay, gün, saat bilgisi almak için CMD komut dosyasında kullanma:

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

Gerekli herhangi bir biçimde bir zaman damgası almak için CMD komut dosyasında kullanma:

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe +"%%y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i

Herhangi bir referans dosyasından tarih/saat bilgilerini çıkarma.

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

Bir dosyaya tarih/saat bilgilerini ekleme:

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y-%%m-%%d.%%H%%M%%S"') do ren file.txt file.%%i.txt

date.exe, ücretsiz GNU araçlarının bir parçasıdır / kurulmasına gerek yoktur.

NOT: date.exe dosyasını arama yolundaki herhangi bir dizine kopyalamak, diğer Windows komut dosyalarının date komutunu kullanan komut dosyalarının başarısız olmasına neden olabilir.

100
Uri Liebeskind

Zaman ayarlarına bağlı olmayan iki yol daha (her ikisi de : - Lokalizasyondan bağımsız olarak veri/zaman nasıl alınır: ). Her ikisi de haftanın gününü alır ve hiçbiri yönetici izni gerektirmez !:

  1. MAKECAB- HER Windows sisteminde çalışacak (hızlı, ancak küçük bir geçici dosya oluşturur) (foxidrive betiği):

    @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
    

    Tarih işlevi hakkında daha fazla bilgi .

  2. ROBOCOPY- Windows XP ve Windows Server 2003 için yerel komut değil, ancak Microsoft sitesinden indirilen olabilir. Ancak, Windows Vista ve üstündeki her şeye yerleşik olarak yer verilmiştir:

    @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
    

    Ve diğer Windows script dillerini kullanan üç yol daha. Size daha fazla esneklik verecekler. yılın haftasını, milisaniyede süreyi vb.

  3. JScript/toplu iş karma (.bat olarak kaydedilmesi gerekir). JScript, NT ve üzeri her sistemde, Windows Komut Dosyası Sistemi) ( kayıt defterinde devre dışı bırakılabilirse, bu nadir bir durumdur ):

    @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. VSCRIPT/BATCH hybrid (VBScript'i geçici bir dosya kullanmadan bir toplu iş dosyasına gömmek ve yürütmek mümkün mü?) JScript ile aynı durumda, ancak hibridizasyon o kadar mükemmel değil:

    :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 - .NET olan her makineye yüklenebilir - Microsoft'tan indirilir ( v1 , v2 , v3 (yalnızca Windows 7 ve üzeri için)). Varsayılan olarak Windows 7/Windows Server 2008 ve üstündeki her şeye yüklenir:

    C:\> powershell get-date -format "{dd-MMM-yyyy HH:mm}"
    

    Bir toplu iş dosyasından kullanmak için:

    for /f "delims=" %%# in ('powershell get-date -format "{dd-MMM-yyyy HH:mm}"') do @set _date=%%#
    
  6. Kendi kendine derlenen jscript.net/batch (.NET olmadan bir Windows makinesi görmedim, bu yüzden bunun oldukça taşınabilir olduğunu düşünüyorum):

    @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 Bu, haftanın gününü ve gününü alamaz. Nispeten yavaş ve aynı zamanda geçici bir dosya yaratıyor ve logman'ın günlük dosyalarına koyduğu zaman damgalarına dayanıyor. Windows XP ve üzeri her şey üzerinde çalışacak. Muhtemelen kimse tarafından asla kullanılmayacak - ben dahil - ama bir başka yol daha ...

    @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
    
  8. WMICile aynı şekilde yılın haftasını ve haftanın gününü verir, ancak milisaniye değil (milisaniye için foxidrive'ın cevabını kontrol edin):

    for /f %%# in ('wMIC Path Win32_LocalTime Get /Format:value') do @for /f %%@ in ("%%#") do @set %%@
    echo %day%
    echo %DayOfWeek%
    echo %hour%
    echo %minute%
    echo %month%
    echo %quarter%
    echo %second%
    echo %weekinmonth%
    echo %year%
    
  9. TYPEPERFkullanarak, farklı dil ayarlarıyla hızlı ve uyumlu ve mümkün olduğunca çabuk olmak için:

    @echo off
    setlocal
    
    :: Check if Windows is Windows XP and use Windows XP valid counter for UDP performance
    ::if defined USERDOMAIN_roamingprofile (set "v=v4") else (set "v=")
    
    for /f "tokens=4 delims=. " %%# in ('ver') do if %%# GTR 5 (set "v=v4") else ("v=")
    set "mon="
    for /f "skip=2 delims=," %%# in ('typeperf "\UDP%v%\*" -si 0 -sc 1') do (
       if not defined mon (
          for /f "tokens=1-7 delims=.:/ " %%a in (%%#) do (
            set mon=%%a
            set date=%%b
            set year=%%c
            set hour=%%d
            set minute=%%e
            set sec=%%f
            set ms=%%g
          )
       )
    )
    echo %year%.%mon%.%date%
    echo %hour%:%minute%:%sec%.%ms%
    endlocal
    
  10. MSHTAyukarıda # 3'te gösterilen JScript yöntemine benzer JavaScript yöntemlerinin çağrılmasını sağlar. JavaScript’in, Date değerlerini içeren, ay değerlerini içeren, 0 ile 11 arasında, 1 ile 12 arasında numaralandırıldığını unutmayın. Bu nedenle, 9 değeri, Ekim anlamına gelir.

    <!-- : Batch portion
    
    @echo off
    setlocal
    
    for /f "delims=" %%I in ('mshta "%~f0"') do set "now.%%~I"
    
    rem Display all variables beginning with "now."
    set now.
    
    goto :EOF
    
    end batch / begin HTA -->
    
    <script>
        resizeTo(0,0)
        var fso = new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1),
            now = new Date(),
            props=['getDate','getDay','getFullYear','getHours','getMilliseconds','getMinutes',
                'getMonth','getSeconds','getTime','getTimezoneOffset','getUTCDate','getUTCDay',
                'getUTCFullYear','getUTCHours','getUTCMilliseconds','getUTCMinutes','getUTCMonth',
                'getUTCSeconds','getYear','toDateString','toGMTString','toLocaleDateString',
                'toLocaleTimeString','toString','toTimeString','toUTCString','valueOf'],
            output = [];
    
        for (var i in props) {output.Push(props[i] + '()=' + now[props[i]]())}
        close(fso.Write(output.join('\n')));
    </script>
    
86
npocmaka

İşte alt.msdos.batch.nt'den yerel olarak bağımsız çalışan bir değişken.

Bunu bir metin dosyasına yerleştirin, ör. getDate.cmd

-----------8<------8<------------ snip -- snip ----------8<-------------
    :: Works on any NT/2k machine independent of regional date settings
    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
    for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
      for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
        set '%%a'=%%i
        set '%%b'=%%j
        set '%%c'=%%k))
    if %'yy'% LSS 100 set 'yy'=20%'yy'%
    set Today=%'yy'%-%'mm'%-%'dd'% 
    ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

    ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]

    :EOF
-----------8<------8<------------ snip -- snip ----------8<-------------

Kodun çalışmasını sağlamak için, msder'leri stderr'e gönderir, %% a, %% b ve %% c değişken atamalarına tek tırnak işareti eklemek zorunda kaldım. Yerel ayarım (PT), "set = 20" gibi öğelerin yürütüldüğü döngü/ayrıştırmada bir aşamada hatalara neden oluyordu. Tırnak işaretleri, atama ifadesinin sol tarafı için (boş da olsa) bir belirteç verir.

Olumsuz, dağınık yerel ayar değişken isimleridir: 'yy', 'mm' ve 'dd'. Ama hey, kimin umrunda!

42
vMax

Bunu kullanıyorum (yine bölge bağımsız değil (İngiltere))

set bklog=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%%time:~3,2%
33
Dale Walker

Maalesef bu bölgesel ayarlara karşı bağışıklık kazanmıyor, ama istediğini yapıyor.

set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set _my_datetime=%date:~10,4%-%date:~4,2%-%date:~7,2%_%hour%%time:~3,2%

Bulabileceğiniz şeyler şaşırtıcı - Wikipedia .

24
Mark Ransom

Geçerli günü komut satırında almak için lütfen aşağıdaki komut dosyasını kullanın:

echo %Date:~0,3%day
16
sudipto roy

Bu kodun ilk dört satırı, Windows XP Professional ve daha üst sürümlerinde size güvenilir YY GG AA YYYY HH Min Sec değişkenleri sunar.

@echo off
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 "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
16
foxidrive

Başka bir yol ( kredi ):

@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @( 
    Set Month=%%A
    Set Day=%%B
    Set Year=%%C
)

@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%

Buradaki cevaplarımın, bölgesel ayarlar tarafından belirlenen gün ve ayın sırasına bağlı olduğunu - bunun nasıl çözüleceğinden emin değilim.

15
J c
"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.Zip
14
DigiP

Bu gerçekten daha kısa değil ama daha esnek bir yol olabilir ( kredi ):

FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET date=%mm%%dd%%yyyy%
13
J c

İşte tarih satırını tek satırda almanın bir yolu:

for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %a in ('%date% %time%') do echo %c-%a-%b %d%e

ABD'de bu "yyyy-aa-gg hhmm" olarak verilir. Farklı bölgesel ayarlar farklı% tarih% çıktılarına neden olur, ancak simge sırasını değiştirebilirsiniz.

Farklı bir format istiyorsanız, belirteçleri yeniden düzenleyerek ya da farklı (ya da hiç) ayırıcılar kullanarak echo deyimini değiştirin.

9
Matthew Johnson

Sadece bu satırı kullan:

PowerShell -Command "get-date"
8
gdelfino

Kısa cevap :

 :: Start - Run , type:
 cmd /c "powershell get-date -format ^"{yyyy-MM-dd HH:mm:ss}^"|clip"

 :: click into target media, Ctrl + V to paste the result 

Uzun cevap

    @echo off
    :: START USAGE  ==================================================================
    ::SET THE NICETIME 
    :: SET NICETIME=BOO
    :: CALL GetNiceTime.cmd 

    :: ECHO NICETIME IS %NICETIME%

    :: echo Nice time is %NICETIME%
    :: END USAGE  ==================================================================

    echo set hhmmsss
    :: this is Regional settings dependant so Tweak this according your current settings
    for /f "tokens=1-3 delims=:" %%a in ('echo %time%') do set hhmmsss=%%a%%b%%c 
    ::DEBUG ECHO hhmmsss IS %hhmmsss%
    ::DEBUG PAUSE
    echo %yyyymmdd%
        :: this is Regional settings dependant so Tweak this according your current settings
    for /f "tokens=1-3 delims=." %%D in ('echo %DATE%') do set  yyyymmdd=%%F%%E%%D
    ::DEBUG ECHO yyyymmdd IS %yyyymmdd%
    ::DEBUG PAUSE


    set NICETIME=%yyyymmdd%_%hhmmsss%
    ::DEBUG echo THE NICETIME IS %NICETIME%

    ::DEBUG PAUSE
8
Yordan Georgiev

Matthew Johnson bir astar çözümü bir astar tarihini ve saatini almak için anlamlı ve kullanışlıdır.

Bununla birlikte, bir toplu iş dosyasından çalışmak için basit bir değişiklik yapması gerekir:

for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
7
John Langstaff

Ve burada zaman bölümü için benzer bir toplu iş dosyası.

:: http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional time settings
::
:: Gets the time in ISO 8601 24-hour format
::
:: Note that %time% gets you fractions of seconds, and time /t doesn't, but gets you AM/PM if your locale supports that.
:: Since ISO 8601 does not care about AM/PM, we use %time%
::
    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    for /f "tokens=1-4 delims=:,.-/ " %%i in ('echo %time%') do (
      set 'hh'=%%i
      set 'mm'=%%j
      set 'ss'=%%k
      set 'ff'=%%l)
    ENDLOCAL & SET v_Hour=%'hh'%& SET v_Minute=%'mm'%& SET v_Second=%'ss'%& SET v_Fraction=%'ff'%

    ECHO Now is Hour: [%V_Hour%] Minute: [%V_Minute%] Second: [%v_Second%] Fraction: [%v_Fraction%]
    set timestring=%V_Hour%%V_Minute%%v_Second%.%v_Fraction%
    echo %timestring%

    :EOF

--jeroen

cevabını / ile toplu iş dosyasını vMax 'dan değiştirdim, böylece Hollanda diliyle de çalışıyorum.
Hollandalı - bizim gibi ısrarcı - orijinal toplu iş dosyasını bozan %date%, date/t ve date'da birkaç değişiklik var.

Bazı insanlar bunu diğer Windows yerellerine karşı da kontrol edebilir ve sonuçları tekrar rapor edebilirlerse, Güzel olurdu.
Toplu iş dosyası konumunuzda başarısız olursa, lütfen bu iki ifadenin çıktısını İstemi komutuna ekleyin:
echo:^|date
date/t

Bu toplu iş dosyasından almanız gereken çıktının bir örneğidir:

C:\temp>set-date-cmd.bat
Today is Year: [2011] Month: [01] Day: [03]
20110103

İşte neden hakkında yorumlarla revize edilmiş kod:

:: https://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional date settings
::
:: 20110103 - adapted by [email protected] for Dutch locale
:: Dutch will get jj as year from echo:^|date, so the '%%c' trick does not work as it will fill 'jj', but we want 'yy'
:: luckily, all countries seem to have year at the end: http://en.wikipedia.org/wiki/Calendar_date
::            set '%%c'=%%k
::            set 'yy'=%%k
::
:: In addition, date will display the current date before the input Prompt using dashes
:: in Dutch, but using slashes in English, so there will be two occurances of the outer loop in Dutch
:: and one occurence in English.
:: This skips the first iteration:
::        if "%%a" GEQ "A"
::
:: echo:^|date
:: Huidige datum: ma 03-01-2011
:: Voer de nieuwe datum in: (dd-mm-jj)
:: The current date is: Mon 01/03/2011
:: Enter the new date: (mm-dd-yy)
::
:: date/t
:: ma 03-01-2011
:: Mon 01/03/2011
::
:: The assumption in this batch-file is that echo:^|date will return the date format
:: using either mm and dd or dd and mm in the first two valid tokens on the second line, and the year as the last token.
::
:: The outer loop will get the right tokens, the inner loop assigns the variables depending on the tokens.
:: That will resolve the order of the tokens.
::
@ECHO off
    set v_day=
    set v_month=
    set v_year=

    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
::DEBUG echo toks=%toks%
      for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
::DEBUG echo first token=%%a
        if "%%a" GEQ "A" (
          for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
            set '%%a'=%%i
            set '%%b'=%%j
            set 'yy'=%%k
          )
        )
      )
      if %'yy'% LSS 100 set 'yy'=20%'yy'%
      set Today=%'yy'%-%'mm'%-%'dd'%

    ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

    ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]
    set datestring=%V_Year%%V_Month%%V_Day%
    echo %datestring%

    :EOF

--jeroen

wmic tabanlı bir işlev:

:Now  -- Gets the current date and time into separate variables
::    %~1: [out] Year
::    %~2: [out] Month
::    %~3: [out] Day
::    %~4: [out] Hour
::    %~5: [out] Minute
::    %~6: [out] Second
  setlocal
  for /f %%t in ('wmic os get LocalDateTime ^| findstr /b [0-9]') do set T=%%t
  endlocal & (
    if "%~1" neq "" set %~1=%T:~0,4%
    if "%~2" neq "" set %~2=%T:~4,2%
    if "%~3" neq "" set %~3=%T:~6,2%
    if "%~4" neq "" set %~4=%T:~8,2%
    if "%~5" neq "" set %~5=%T:~10,2%
    if "%~6" neq "" set %~6=%T:~12,2%
  )
goto:eof

Upside: Bölge bağımsız. Olumsuz: Yalnızca sistem yöneticileri wmic.exe dosyasını çalıştırabilir.

Kullanımı:

call:Now Y M D H N S
echo %Y%-%M%-%D% %H%:%N%:%S%

Bu şöyle bir dize ekos:

2014-01-22 12:51:53

İşlev parametrelerinin Parametre dışı olduğunu unutmayın - yani, değerler yerine değişken adları girmelisiniz.

Tüm parametreler isteğe bağlıdır, yalnızca yıl ve ayı almak istiyorsanız call:Now Y M geçerli bir çağrıdır.

6
Tomalak

Kullandığım şey bu:

::Date Variables - replace characters that are not legal as part of filesystem file names (to produce name like "backup_04.15.08.7z")
SET DT=%date%
SET DT=%DT:/=.%
SET DT=%DT:-=.%

Yedeklemeleri 7-Zip arşivine otomatikleştirmek için daha fazla fikir istiyorsanız, fikirler için kullanabileceğiniz veya inceleyebileceğiniz ücretsiz/açık bir projem var: http://wittman.org/ziparcy/

5
micahwittman

Ben de benzer bir problem yaşadım. Şifrelenmiş bir dosyanın FTP sunucusundan otomatik olarak günlük indirme yapıyorum. Gpg kullanarak dosyanın şifresini çözmek, dosyayı geçerli tarihe (YYYYMMDD formatı) yeniden adlandırmak ve şifresi çözülen dosyayı doğru bölüm için bir klasöre bırakmak istedim.

Dosyayı tarihe göre yeniden adlandırmak için çeşitli önerilerde bulundum ve bu basit çözüme rastlayana kadar şansım yavermadı.

for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "decrypted.txt" %%g-%%e-%%f.txt

Mükemmel çalıştı (yani, dosya adı "2011-06-14.txt" olarak çıkıyor).

(Kaynak)

4
KChiki

http://sourceforge.net/projects/unxutils/files/

Zip dosyasının içine "Date.exe" adı verilen bir şey arayın ve "DateFormat.exe" olarak yeniden adlandırın (çakışmaları önlemek için).

Windows sistem32 klasörünüze yerleştirin.

Çok sayıda "tarih çıktısı" seçeneği var.

Yardım için DateFormat.exe --h kullanın

SET kullanarak çıktılarını bir ortam değişkenine nasıl koyacağınızdan emin değilim.

4
Sally

ISO tarih biçimini üreten bölgesel bağımsız çözüm:

rem save the existing format definition
for /f "skip=2 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set FORMAT=%%a
rem set ISO specific format definition
reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /f /d yyyy-MM-dd 1>nul:
rem query the date in the ISO specific format 
set ISODATE=%DATE%
rem restore previous format definition
reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /f /d %FORMAT% 1>nul:

Hala en iyi duruma getirilebilecek olan şey: Tarih formatı kısa sürede değiştirilirken kullanılıyorsa, diğer işlemler karışabilir. Bu yüzden çıktıyı mevcut format dizgisine göre ayrıştırmak 'daha güvenli' olabilir - fakat daha karmaşık olacaktır

3
V15I0N
:: GetDate.cmd -> Uses WMIC.exe to get current date and time in ISO 8601 format
:: - Sets environment variables %_isotime% and %_now% to current time
:: - On failure, clears these environment variables
:: Inspired on -> https://ss64.com/nt/syntax-getdate.html
:: - (cX) 2017 [email protected]
:: - http://stackoverflow.com/questions/203090
@echo off

set _isotime=
set _now=

:: Check that WMIC.exe is available
WMIC.exe Alias /? >NUL 2>&1 || goto _WMIC_MISSING_

if not (%1)==() goto _help
SetLocal EnableDelayedExpansion

:: Use WMIC.exe to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC.exe Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    IF "%%~L"=="" goto  _WMIC_done_
        set _yyyy=%%L
        set _mm=00%%J
        set _dd=00%%G
        set _hour=00%%H
        set _minute=00%%I
        set _second=00%%K
)
:_WMIC_done_

::   1    2     3       4      5      6
:: %%G  %%H    %%I     %%J    %%K    %%L
:: Day  Hour  Minute  Month  Second  Year
:: 27   9     35      4      38      2017

:: Remove excess leading zeroes
        set _mm=%_mm:~-2%
        set _dd=%_dd:~-2%
        set _hour=%_hour:~-2%
        set _minute=%_minute:~-2%
        set _second=%_second:~-2%
:: Syntax -> %variable:~num_chars_to_skip,num_chars_to_keep%

:: Set date/time in ISO 8601 format:
        Set _isotime=%_yyyy%-%_mm%-%_dd%T%_hour%:%_minute%:%_second%
:: -> http://google.com/search?num=100&q=ISO+8601+format

if 1%_hour% LSS 112 set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%am
if 1%_hour% LSS 112 goto _skip_12_
    set /a _hour=1%_hour%-12
    set _hour=%_hour:~-2%
    set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%pm
    :: -> https://ss64.com/nt/if.html
    :: -> http://google.com/search?num=100&q=SetLocal+EndLocal+Windows
    :: 'if () else ()' will NOT set %_now% correctly !?
:_skip_12_

EndLocal & set _isotime=%_isotime% & set _now=%_now%
goto _out

:_WMIC_MISSING_
echo.
echo WMIC.exe command not available
echo - WMIC.exe needs Administrator privileges to run in Windows
echo - Usually the path to WMIC.exe is "%windir%\System32\wbem\WMIC.exe"

:_help
echo.
echo GetDate.cmd: Uses WMIC.exe to get current date and time in ISO 8601 format
echo.
echo    %%_now%%     environment variable set to current date and time
echo    %%_isotime%% environment variable to current time in ISO format
echo    set _today=%%_isotime:~0,10%%
echo.

:_out
:: EOF: GetDate.cmd
2
Adolfo

İşlevsel biçimde referans olarak bilinen bir yerellik verilir. ECHOTIMESTAMP çağrısı zaman damgasının bir değişkene nasıl girileceğini gösterir (bu örnekte DTS.)

@ECHO off

CALL :ECHOTIMESTAMP
GOTO END

:TIMESTAMP
SETLOCAL  EnableDelayedExpansion
    SET DATESTAMP=!DATE:~10,4!-!DATE:~4,2!-!DATE:~7,2!
    SET TIMESTAMP=!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2!
    SET DTS=!DATESTAMP: =0!-!TIMESTAMP: =0!
ENDLOCAL & SET "%~1=%DTS%"
GOTO :EOF

:ECHOTIMESTAMP
SETLOCAL
    CALL :TIMESTAMP DTS
    ECHO %DTS%
ENDLOCAL
GOTO :EOF

:END

EXIT /b 0

Ve timestamp.bat dosyasına kaydedildi, işte çıktı:

 enter image description here

0
bvj

Windows 7'de bu kod benim için çalışıyor:

SET DATE=%date%
SET YEAR=%DATE:~0,4%
SET MONTH=%DATE:~5,2%
SET DAY=%DATE:~8,2%
ECHO %YEAR%
ECHO %MONTH%
ECHO %DAY%

SET DATE_FRM=%YEAR%-%MONTH%-%DAY% 
ECHO %DATE_FRM%
0
Frizz1977

Ben mümkün olduğunca kısa yapmayı tercih ediyorum, bu yüzden ay ve yıl olmadan günlük güncelleme için yeterli olur

SET date=%DATE:~0,2%
SET hour=%TIME:~0,2%
SET minute=%TIME:~3,2%
IF "%date:~0,1%"==" " SET date=0%DATE:~1,1%
IF "%hour:~0,1%"==" " SET hour=0%TIME:~1,1%
IF "%minute:~0,1%"==" " SET minute=0%TIME:~1,1%
SET VERSION=%date%%hour%%minute%
ECHO VERSION=%date%%hour%%minute%
VERSION=140105

Bir uygulamanın sürümüne gelince, bir oluşturucu ile günlük güncellemenin taze dağıtımını yapın

steps:
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", '--version=v1-140105-fresh']
timeout: "300s"

Bu sayede tüm uygulamayı otomatik olarak güncellemek daha kolay olacaktır.

sed -e "s/-[0-9]\{1,\}-fresh/-%VERSION%-local/g" cloudbuild.yaml > tmp.txt 
mv -f tmp.txt cloudbuild.yaml

Çıktı dosyası, dosya adlarına dokunmadan yerel güncelleştirmeye hazır olacak

steps:
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", '--version=v1-140117-local']
timeout: "300s"
0
Chetabahana