Windows komut satırında geçerli tarih / saati dosya / klasör adında kullanım için uygun biçimde nasıl edinebilirim?


540

Güncelleme: Şimdi 2016 için, özellikle bölgesel ayarlar sorunu nedeniyle, gerçekten geriye dönük uyumlu bir neden olmadığı sürece PowerShell'i kullanacağım date. @ Npocmaka'nın https://stackoverflow.com/a/19799236/8479 adresine bakın


Geçerli datetime'ı dosya adına koyabileceğim bir biçimde almak için kullanabileceğim Windows komut satırı ifadeleri nedir?

Örneğin, adın bir parçası olarak geçerli tarih ve saat ile bir arşive bir dizini fermuarlar bir .bat dosyası istiyorum Code_2008-10-14_2257.zip. Makinenin bölgesel ayarlarından bağımsız olarak bunu yapmanın kolay bir yolu var mı?

Tarih formatını gerçekten önemsemiyorum, ideal olarak yyyy-aa-gg olurdu, ancak basit bir şey iyidir.

Şimdiye kadar aldım, makinemde bana 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 tıknaz görünüyor. İdeal olarak, daha kısa ve daha önce bahsedilen biçime sahip olurdu.

Windows Server 2003 ve Windows XP Professional kullanıyorum. Bunu başarmak için ek araçlar yüklemek istemiyorum (güzel tarih biçimlendirmesi yapacak bazı olduğunu fark etsem de).


7
Kodunuz için otomatik yedekleme mi oluşturuyorsunuz? Aferin! Bunu da yapmalıyız :)
Andrei Rînea

24
powershell insanları kullanın ...[datetime]::now.tostring("yyyy-MM-dd")
Nacht - Monica

SQL Server'da xp_cmdshell kullanarak oluşturulmuş tarihi olan dosyaları yüklemek mümkün mü? Stackoverflow hakkında bir soru sordum, lütfen bağlantıya bakınız @ stackoverflow.com/q/32293517/3327081
kolunar

Yanıtlar:


667

Geçerli tarihi MMDDYYYY biçiminde almak için Windows Toplu İş Dosyası (.bat) konusuna 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 hattı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ölge / ay siparişinden bağımsız olarak istiyorsanız, ISO düzeninde olduğu için kaynak olarak "WMIC os GET LocalDateTime" kullanabilirsiniz:

@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]


44
İngiltere halkı For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)için ikinci sıra için isteyeceksiniz .
Rory

17
Bu çözüm yerel ayara bağlıdır, Rory, tarihin 22-02-2012 olarak geldiği diğer yerel bölgeler için İngiltere örneğini verdi = delims = / delims = -
Nuno Furtado

25
Sistemimde% TIME%, "0:01:15" ve "3:15:12" gibi değerler döndürüyor ve yanıttaki %% a %% b kodu, "001" ve "315" gibi önde gelen bir alan sağlıyor. Dört basamaklı hhmm almak için bunu kullanın: For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))Bu benim dosya adları tercih ettiğim "0001" ve "0315" gibi değerleri döndürür.
twamley

10
wmicKomutun güzel versiyonu ! Şimdiye kadar sadece gördüm WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table. Aynı şekilde, 20120623-1619yerel Amsterdam saat for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
dilimime

5
Benim için söylüyor%%a was unexpected at this time.
Scott zuz22 Blacklock

109

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

Komutun %DATE%ve dirkomutun çıktı biçimi bölgesel olarak bağımlıdır ve bu nedenle ne sağlam ne de akıllıdır. date.exe (parçası UnxUtils ) herhangi bir düşünülebilir formatta herhangi bir tarih ve saat bilgilerini sunar. Ayrıca tarih / saat bilgilerini içeren herhangi bir dosyadan ayıklayabilirsiniz date.exe.

Örnekler: (cmd betiğinde% 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" '

Bir referans dosyasından 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, zaman bilgisi almak için bir CMD betiğinde 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 formatta zaman damgası almak için bir 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 bilgilerinin çıkarılması.

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, kurulum gerektirmeyen ücretsiz GNU araçlarının bir parçasıdır .

NOT: date.exeArama yolundaki herhangi bir dizine kopyalamak , Windows yerleşik datekomutunu kullanan diğer komut dosyalarının başarısız olmasına neden olabilir .


4
Yukarıdaki tuhaf bir şekilde daha popüler çözümden çok daha iyi ama Windows 8.1 isteminden kaçınmak için / t eklemek zorunda kaldım
rainabba

6
Yerleşik Windows 8.1 date.exeyerel ayarlara bağlı görünüyor. Yerel olarak bağımsız olsaydı, MM / gg / yyyy veya yyyy-AA-gg olmasını beklerdim, sistemimdeki gg / aa / yyyy olarak tarihi döndürür. Ben bu cevap yerleşik date.exe ama bazı üçüncü taraf sürümü hakkında konuştuğunu sanmıyorum.
SSS

1
komut satırında istediğiniz biçimi sağlarsanız yerel ayardan bağımsızdır
terrinecold

3
Date.exe'nin (UnxUtils'in bir parçası) yerleşik tarih komutuyla aynı olmadığını lütfen unutmayın. Yani / t eklemeniz gerekiyorsa windows date komutu yürütülür. Date.exe + "% Y-% m-% d" gibi bir şey işe yararsa, UnxUtils'i doğru şekilde yüklediniz. :-)
just.do.it

SQL Server'da xp_cmdshell kullanarak oluşturulmuş tarihi olan dosyaları yüklemek mümkün mü? Ben "forfiles" komutunu denedim ama boşuna. Stackoverflow hakkında bir soru sordum, lütfen bağlantıya bakınız @ stackoverflow.com/q/32293517/3327081
kolunar

103

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

  1. MAKECAB - HER Windows sisteminde çalışır (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 alma işlevi hakkında daha fazla bilgi .

  2. ROBOCOPY - Windows XP ve Windows Server 2003 için yerel komut değildir, ancak microsoft sitesinden indirilebilir . Ancak Windows Vista ve sonraki sürümlerin her birinde yerleşiktir:

    @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 komut dosyası dillerini kullanan üç yol daha. Size daha fazla esneklik kazandıracaklar, örneğin yılın haftasını, milisaniye cinsinden zamanı vb. Alabilirsiniz.

  3. JScript / toplu karma (olarak kaydedilmesi gerekir .bat). JScript, Windows Komut Dosyası Ana Bilgisayarının bir parçası olarak NT ve üzerindeki her sistem formunda kullanılabilir ( ancak kayıt defteri aracılığıyla devre dışı bırakılabilir, ancak 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 hibrid ( 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ı durumdur, ancak hibridizasyon o kadar mükemmel değildir:

    :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'e sahip her makineye yüklenebilir - Microsoft'tan indirin ( v1 , v2 , v3 (yalnızca Windows 7 ve üstü için)). Windows 7 / Windows Server 2008 ve sonraki sürümlerin her birinde varsayılan olarak 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 derlenmiş jscript.net/batch (.NET olmadan bir Windows makinesi görmedim, bu yüzden bu oldukça taşınabilir bir şey 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 yılını ve gününü alamaz. Nispeten yavaştır ve ayrıca geçici bir dosya oluşturur ve logman'ın günlük dosyalarına koyduğu zaman damgalarına dayanır. Windows XP ve üzeri her şey üzerinde çalışacaktır. Muhtemelen benim dahil hiç kimse tarafından kullanılmayacak, ancak bir yol daha var ...

    @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. WMIC ile yılın bir haftasını ve haftanın gününü veren ancak milisaniye olmayan bir yol daha (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. TYPEPERF'i farklı dil ayarlarıyla hızlı ve uyumlu olabilmek için bazı çabalarla kullanmak :

    @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. MSHTA , yukarıdaki # 3'te gösterilen JScript yöntemine benzer JavaScript yöntemlerinin çağrılmasına izin verir. JavaScript'in ay değerlerini içeren Date nesnesi özelliklerinin 1'den 12'ye değil, 0'dan 11'e kadar sayıldığını unutmayın. Dolayısıyla 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>
    

2
powershell için C: \> / f %% i için ('powershell get-date -format "{yyyyMMdd_HHmmss}"') datetime = %% i C: \> echo% datetime%
Samuel

1
makecab: Bu ~.rpt, adlı bir dosya oluşturarak ve stringiçinde başlayarak makecab, gibi bir satır olan bir arama yaparak çalışır MakeCAB Report: Tue Sep 02 22:15:57 2014. benim için bu komut yerelleştirilmiş değil, yerelden bağımsız. Bu hile buna güveniyor. Umarım hiç olmayacaktır, ya da başka dikkat!
n611x007

10
Açılış metninden "İki tane daha ..." ve ardından 8 çözümün tadını çıkarıyorum.
Adam Smith

1
Ne, mshtamelez değil mi? :) Cevabınızı düzenleyip bir cevap eklersem sorun olur mu? Bu, ezoterik çözümlerin en iyi koleksiyonu gibi görünüyor ve mshtaburaya ait gibi görünüyor .
rojo

1
Ne denesem denesem kabul edilen çözüm benim için işe yaramaz. Bu çözümlerin birçoğu benim için çalıştı. (Parti ve Powershell).
Brett Bekleyin

44

İşte alt.msdos.batch.nt dosyasından yerel olarak bağımsız çalışan bir varyant.

Bunu bir metin dosyasına koyun, örneğin 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<-------------

Kod çalışma sans hata msg en stderr almak için, %% a, %% b ve %% c değişken atamaları etrafında tek tırnak eklemek zorunda kaldı. Yerel ayarım (PT), "set = 20" gibi şeylerin yürütülmekte olduğu döngü / ayrıştırma işleminin bir aşamasında hatalara neden oluyordu. Tırnak işaretleri, atama ifadesinin sol tarafı için bir belirteç (boş da olsa) verir.

Dezavantajı dağınık yerel değişken adlarıdır: 'yy', 'mm' ve 'dd'. Ama hey, kimin umrunda!


3
Bu mükemmel ve bugüne kadar gördüğüm en basit ve en zarif yaklaşım.
Doug

2
Ayrıca bkz Jeroen adlı geliştirmeleri tüm yerel ayarlar dizeleri kullanmaz olarak gerekli, dd, mmve yyçıkışında echo:^|date.
Arjan

tüm yerel ayarlarda çalışmaz. (Almanca dateverir Geben Sie das neue Datum ein: (TT-MM-JJ), JJsenaryonuzu kırdığı yer (beklemektedir YY))
Stephan

35

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

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

Bu az bilinen ancak çok etkili teknik için Colon ve Tilde ile Cmd.exe Ortam Değişkenleri konusuna bakın . (Microsoft yetkili referansına bir işaretçi takdir edilecektir.)
DavidRR

İşte Windows XP için Microsoft'un Toplu Dosya Başvurusu . Bu başvuru Toplu iş parametrelerini kullanma'yı içerir . Ne yazık ki, 'dilimleme' tekniği hakkında tartışma yok.
DavidRR

Bu benim için pek işe yaramıyor. Belki bölgesel ayarlarla ilgili bir şeydir? 15 Ekim 2014 Çarşamba günü çalıştırırken "/ 15 / - 1-We_1009" çıktısı alıyorum.
Joel B

26

Bu kodun ilk dört satırı, Windows XP Professional ve sonraki sürümlerde güvenilir YY GG AA YYYY SS SS Sec değişkenlerini verecektir.

@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

Mükemmel, bu benim için en iyi çözüm çünkü PS'yi çağırmak, cmd metninin görünmesine neden olacak ve komik görünmeye başlayacak.
Ste

25

Ne yazık ki bu bölgesel ayarlara karşı bağışık değildir, ancak ne istersen yapar.

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%

Wikipedia'da bulabileceğiniz şeyler inanılmaz .


1
İşaretle - Yanıtınızda sergilenen 'dilimleme' tekniğini açıklayan iki nokta üst üste ve Tilde bulunan Cmd.exe Ortam Değişkenleri bulundu . Bu makaleyi artık Wikipedia makalesinde bulamıyorum. Microsoft'tan yetkili bir başvuru bulmak istiyorum.
DavidRR

1
İşte Windows XP için Microsoft'un Toplu Dosya Başvurusu . Bu başvuru Toplu iş parametrelerini kullanma'yı içerir . Ne yazık ki, 'dilimleme' tekniği hakkında tartışma yok.
DavidRR

18

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

8
Bununla biraz oynadım, Tarih ve Saati almak için bulduğum en kısa şey: echo% date
%%

15

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 her iki yanıtımın hala bölgesel ayarlarla belirlenen gün ve ayın sırasına bağlı olduğunu unutmayın - nasıl çalışılacağından emin değilim.


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

http://www.dotnetperls.com/7-zip-examplesbazı iyi noktaları var gelecekte bazıları için yararlı olabilir.
Saravanan

13

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%

10

Tarih saatini tek bir 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 ssd" çıktısı verir. Farklı bölgesel ayarlar, farklı% tarih% çıkışlarına neden olur, ancak jeton sırasını değiştirebilirsiniz.

Farklı bir biçim istiyorsanız, belirteçleri yeniden düzenleyerek veya farklı (veya hayır) ayırıcılar kullanarak echo deyimini değiştirin.


Saati 12 saat formatında almanın ve ayrıca AM veya PM bilgilerini görüntülemenin bir yolu var mı?
Sangli

9

Sadece bu satırı kullanın:

PowerShell -Command "get-date"

9

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

:: ('PowerShell -Command "get-date" -format "yyyyMMdd"') için / f% i için cmd cinsinden yyyyMMdd =% i :: ('PowerShell -Command içinde / f %% i için cmd komut dosyasında "get-date" -format "yyyyMMdd" ') yyyyMMdd = %% i ayarladı
Yordan Georgiev

8

Matthew Johnson'ın bir-astar tarih ve saatini almak için bir-astar çözüm etkili ve yararlı.

Bununla birlikte, bir toplu iş dosyasından çalışmak için basit bir modifikasyona ihtiyaç duyar:

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

1
Windows 8.1'de CMD (%% a şu anda beklenmedik) veya PowerShell (Eksik açılış '(' anahtar kelimeden sonra ')' da
çalışmıyor

3
Rainabba, bu komut CMD satırından verildiğinde aldığınız hatadır . Ancak, " bir toplu iş dosyasından " komutu, "2014-01-30 1324" değerini döndürür.
John Langstaff

1
veya çok daha basit for döngüsü olmadan olurduecho %date:/=-%%time::=-%
Gerhard Barnard

7

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


Merhaba, Aşağıdaki komutu kullanarak Dosyaları Değiştirme tarihine göre yükleyebildim, z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path” ancak Oluşturma tarihine göre dosyaları nasıl yükleyeceğimi bilmek istiyorum. Herhangi bir yardım çok takdir edilecektir. Stackoverflow hakkında bir soru soruldu, ancak henüz cevap yok. Ayrıntılar için lütfen linke bakınız stackoverflow.com/q/32293517/3327081
kolunar

1
Bununla ilgili yeni bir soru sorun. Hiç kullanmadım forfiles.
Jeroen Wiert Pluimers

7

Ben vMax gelen toplu iş dosyası ile cevap değiştirdi , bu yüzden de Hollandaca dil ile çalışır. Bizim gibi inatçı - - Hollandalı bir kaç değişiklik var , ve bu mola orijinal seri-dosyası.
%date%date/tdate

Bazı kişilerin bunu diğer Windows yerel ayarlarına göre kontrol etmesi ve sonuçları bildirmesi iyi olur.
Toplu iş dosyası konumunuzda başarısız olursa, lütfen komut istemine şu iki ifadenin çıktısını 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 gözden geçirilmiş kod ve nedenleri ile ilgili yorumlar:

:: /programming/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 jeroen@pluimers.com 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


2
Bazıları önce yıl kullanır veya baştaki sıfırları kullanmaz; ülkeye göre Wikipedia'nın Tarih biçimine bakın . Fransız kudreti kullanımı jj-mm-aaaajour, mois, ANNEE için? İtalyanlar belki gg/mm/aaaade giorno, mese, anno? tt.mm.jjjjTag için Almanlar , Monat, Jahr? Ama sonra: Sanırım çoğu ülkede sadece birkaç dil kullanılıyor. Hollanda'da olduğu gibi, Windows da çoğu zaman İngilizce veya Hollandaca olacak. Benim için yeterince iyi.
Arjan

2
Bir kenara: Windows toplu iş dosyalarının Gizli özelliklerindeki başka bir sürüm daha az mükemmeldir (Hollandaca için düzeltmeye ihtiyaç duyar ve jj4 haneli bir yılı zorunlu kılmaz), ancak shiftgünü Monveya gibi atmak için kullanır ma. Sadece farklı.
Arjan

4
Bir Alman sistemini kırıyor. Yıl ve ay çalışır, ancak gün başarısız olur çünkü "gün", "d" değil, Almanca "T" ile başlar ("Etiket"). Bilgi istemindeki biçim dizesi (TT-MM-JJ), date/tçıktıdır 23.06.2012. / cc @Arjan
balpha

2
Başka bir yana: Bir de sipariş alabilir kayıt defterinden kullanarak reg query "HKCU\Control Panel\International" /vShortDate. Kontrol Paneli ayrıca ayarı (her ikisi için tarih görüntülemek için kullanılan biçimi değiştirdiğini değişen istemi açık komutu için: test ederken dikkat dateve date /tve echo %date%), ancak Windows 7 yeni tarih için biçimini değiştirmek DEĞİLDİR! İçine benim kısa tarih biçimi değişiyor gibi YY/MM/dd, beni alır: The current date is: 12/06/23 Enter the new date: (mm-dd-yy). Yeni bir komut istemi açmak bunu düzeltir.
Arjan

2
@Arjan bu olmalı reg query "HKCU\Control Panel\International" /v sShortDate.
tricasse

6

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:-=.%

7-Zip arşivlerine yedeklemeleri otomatikleştirmek için başka fikirler istiyorsanız, fikirler için kullanabileceğiniz veya inceleyebileceğiniz ücretsiz / açık bir projem var: http://wittman.org/ziparcy/


Sistemimde% tarih% "Sal 10/14/2008" içeriyor. Yani, hala "Sal" ve boşluk karakterini kesmeniz (veya başka bir şekilde başa çıkmanız) gerekecektir.
BoltBait

Merhaba @micahwittman. SQL Server'da xp_cmdshell kullanarak oluşturulmuş tarihi olan dosyaları yüklemek mümkün mü? Ben "forfiles" komutunu denedim ama boşuna. Stackoverflow hakkında bir soru sordum, lütfen bağlantıya bakınız @ stackoverflow.com/q/32293517/3327081
kolunar

5

Benzer bir sorun 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 biçimi) yeniden adlandırmak ve şifresi çözülen dosyayı doğru departman için bir klasöre bırakmak istedim.

Dosyayı tarihe göre yeniden adlandırmak için çeşitli önerilerden geçtim ve bu basit çözüm üzerine tökezleyene kadar şansım yoktu.

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)


5

Aşağıdakilere dayanan bir işlev wmic:

: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. Dezavantajı: 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 yansıtır:

2014-01-22 12:51:53

İşlev parametrelerinin out-Parameters olduğunu unutmayın - yani, değerler yerine değişken adları sağlamanız gerekir.

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


4

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

ZIP dosyasının içine "Date.exe" adlı bir şey olup olmadığına bakın ve "DateFormat.exe" olarak yeniden adlandırın (çakışmaları önlemek için).

Windows system32 klasörünüze koyun.

Birçok "tarih çıktısı" seçeneği vardır.

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

Çıkışını bir ortam değişkenine nasıl koyacağınızdan emin değilim ... SET kullanarak.


1
Teşekkürler, ancak bu soru özellikle ek araçlar indirmeden yapmak içindir.
Rory

3

ISO tarih biçimini oluşturan 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:

Yine de optimize edilebilenler: Tarih biçimi değiştirilirken kısa sürede kullanılırsa, diğer işlemler karışabilir. Bu nedenle, çıktıyı mevcut biçim dizesine göre ayrıştırmak 'daha güvenli' olabilir - ancak daha karmaşık olacaktır


iDate'i (technet.microsoft.com/en-us/library/cc978637.aspx ) sorgulayabilir ve koşullu olarak devam edebilirsiniz (technet'e göre 3 olası değer) - henüz denemedim.
Vincent De Smet

2
:: 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 adolfo.dimare@gmail.com
:: - 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

0

Bilinen bir yer göz önüne alındığında, işlevsel formda referans için. ECHOTIMESTAMPÇağrı gösterileri nasıl bir değişken haline damgası almak için ( DTSbu örnekte.)

@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 dosyaya kaydedildi, timestamp.bat, işte çıktı:

resim açıklamasını buraya girin


Bunun bölgesel sorunla birlikte geldiği anlaşılıyor - bu tüm İngiliz makinelerinde çalışmıyor.

Şaşırmadım, @SteveFest. Yerel ayarı geçici olarak ayarlamak mümkün olsaydı, bu küresel bir çözüm sağlamaya yardımcı olabilir, ancak bölgeyi önceden bilmek gerekli görünüyor. Yerel ayarınız en-US veya en-SomewhereElse mi?
bvj

@SteveFest Her birinin doğrulamak için bir örnekle tarih / saat ifadeleri içerdiği bir yer listesi oluşturmak mümkün olacağını düşünüyorum. Süper meşgulüm, ancak açıklamak için cevabımı güncellemeye çalışacağım. HK saat / tarih çıktılarının örneklerini gösterebilir misiniz? Aptalca zh-HK'nin sabit ofsetlerde rakam bastığını varsayabilirim.
bvj

zh-HK: (yy)yy年m月d日 hh:mm- baştaki sıfır yok. (yy) 2 basamaklı yıl veya 4 basamaklı yıl olduğu için yok sayılabilir. Ancak bir şeye dikkat edin: tarih saat formatı makine başına değiştirilebilir.

Teşekkürler @SteveFest, birkaç hafta içinde takip edeceğim. systeminfoCLI'de koş ve bana ne gördüğünü bildir System Locale. Programın çalışması zaman alır, ancak yerel ayar önbelleğe alınabilir ve daha sonra bir zaman damgası biçimini dizine eklemek için kullanılabilir.
bvj

0

Windows 7 ile 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%

Ve yeniden. Makinenizde çalışması güzel, ama noktayı kaçırdınızindependent of the regional settings of the machine
jeb

-1

Ben o / p yaptım dikkat değil bir bölge bağımsız çözümü isteyin. Benim çözümüm İngiltere için.

Bu, Toplu iş dosyasında kullanmak için mümkün olan en basit çözüm, 1 satırlık bir çözümdür:

FOR /F "tokens=1-3 delims=/" %%A IN ("%date%") DO (SET today=%%C-%%B-%%A)
echo %today%

2
Bölgeden bağımsız bir çözümden bahsetti ...particularly because of the regional settings issue with using date. Btw. Çözümünüz diğer yirmi cevapla aynı.
jeb

Evet, ama benimki (isteğe bağlı olarak) komut satırında kullanılabilir. Bir kod satırı aynı çözümü sunacaksa, 35 satır kod göndermenin değeri nedir?
Ed999


Bu cevap yanlış olsa da, gerçek cevap hakkında yorum yapmak için, basitçe yapabileceğiniz zaman burada bir for döngüsü gerekli değildirecho %date:/=-%
Gerhard Barnard

Hayır. FOR döngüsünü atlarsanız, hiçbir değişken oluşturulamaz ve ayıklama sorunuyla karşılaştığınız tarih hala işe yaramaz. FOR döngüsü ile, döngü tarafından oluşturulan değişkenler komut dosyasının diğer bölümlerinde kullanılabilir. Ben sadece 1 satır gerektiğinde FOR döngüsü oluşturmak için kod düzinelerce kullanarak önemsiz. Ve o / p özellikle komut satırında kullanmak için tek satırlık bir çözüm istediğinde, komut olmayan satır çözümleri göndermeyi şiddetle reddediyorum.
Ed999

-3

Zaten bahsedilen sayısız yol olduğunu biliyorum. Ama işte nasıl yapıldığını anlamak için onu yıkmanın yolu. Umarım, adım adım yöntemi seven biri için yararlıdır.

:: Check your local date format
echo %date%

    :: Output is Mon 08/15/2016

:: get day (start index, number of characters)
::         (index starts with zero)
set myday=%DATE:~0,4%
echo %myday%
    :: output is Mon 

:: get month
set mymonth=%DATE:~4,2%
echo %mymonth%
    :: output is 08

:: get date 
set mydate=%DATE:~7,2% 
echo %mydate%
    :: output is 15

:: get year
set myyear=%DATE:~10,4%
echo %myyear%
    :: output is 2016

3
independent of the regional settings of the machine
Konuyu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.