Bagaimana cara mendapatkan tanggal / waktu saat ini pada baris perintah Windows dalam format yang sesuai untuk penggunaan dalam nama file / folder?

540

Pembaruan: Sekarang ini tahun 2016 saya akan menggunakan PowerShell untuk ini kecuali ada alasan yang sangat kompatibel untuk mundur, terutama karena masalah pengaturan regional dengan penggunaan date. Lihat https://stackoverflow.com/a/19799236/8479 di @ npocmaka


Apa pernyataan baris perintah Windows yang bisa saya gunakan untuk mendapatkan datetime saat ini dalam format yang bisa saya masukkan ke nama file?

Saya ingin memiliki file bat. Yang zip direktori ke arsip dengan tanggal dan waktu saat ini sebagai bagian dari nama, misalnya Code_2008-10-14_2257.zip,. Apakah ada cara mudah yang bisa saya lakukan, terlepas dari pengaturan regional mesin?

Saya tidak terlalu keberatan dengan format tanggal, idealnya itu adalah tttt-bb-hh, tetapi segala sesuatu yang sederhana tidak masalah.

Sejauh ini saya sudah mendapatkan ini, yang pada mesin saya memberi saya 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

Saya bisa hidup dengan ini, tetapi tampaknya agak kikuk. Idealnya akan lebih singkat dan memiliki format yang disebutkan sebelumnya.

Saya menggunakan Windows Server 2003 dan Windows XP Professional. Saya tidak ingin menginstal utilitas tambahan untuk mencapai ini (walaupun saya menyadari ada beberapa yang akan melakukan format tanggal yang bagus).

Rory
sumber
7
Membuat cadangan otomatis untuk kode Anda? Bagus untukmu! Kita harus melakukan ini juga :)
Andrei Rînea
24
gunakan powershell people ...[datetime]::now.tostring("yyyy-MM-dd")
Nacht - Reinstate Monica
Apakah mungkin untuk memuat file dengan tanggal yang dibuat menggunakan xp_cmdshell di SQL Server? Saya telah mengajukan pertanyaan tentang stackoverflow, silakan lihat tautan @ stackoverflow.com/q/32293517/3327081
kolunar

Jawaban:

667

Lihat Windows Batch File (.bat) untuk mendapatkan tanggal saat ini dalam format MMDDYYYY :

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

Jika Anda lebih suka waktu dalam format 24 jam / militer, Anda dapat mengganti baris FOR kedua dengan ini:

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

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

Jika Anda menginginkan tanggal secara terpisah dari urutan hari / bulan wilayah, Anda dapat menggunakan "WMIC os GET LocalDateTime" sebagai sumber, karena ini dalam urutan ISO:

@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
Tanggal lokal adalah [2012-06-19 10: 23: 47.048]

Jay
sumber
44
Untuk orang Inggris, Anda akan menginginkan For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)untuk baris kedua.
Rory
17
Solusi ini bergantung pada lokal, Rory memberikan contoh untuk Inggris untuk lokal lain di mana tanggal 22-02-2012 Anda perlu mengganti delims = / dengan delims = -
Nuno Furtado
25
Pada sistem saya% TIME% mengembalikan nilai-nilai seperti "0:01:15" dan "3:15:12" dan kode %% a %% b dalam jawaban memberikan ruang terdepan seperti "001" dan "315". Untuk mendapatkan empat digit hhmm gunakan ini: For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))Itu mengembalikan nilai-nilai seperti "0001" dan "0315" yang saya sukai di nama file saya.
twamley
10
Versi bagus dari wmicperintah! Sejauh ini saya hanya melihat WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table. Demikian juga, untuk mendapatkan 20120623-1619zona waktu Amsterdam lokal saya, dalam satu baris:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
Arjan
5
Bagi saya dikatakan%%a was unexpected at this time.
Scott zuz22 Blacklock
109

Penguraian waktu tanggal independen regional

Format output dari %DATE%dan dari dirperintah tergantung secara regional dan dengan demikian tidak kuat atau pintar. date.exe (bagian dari UnxUtils ) memberikan informasi tanggal dan waktu dalam format apa pun. Anda juga dapat mengekstrak informasi tanggal / waktu dari file apa pun dengan date.exe.

Contoh: (dalam skrip cmd gunakan %% bukan%)

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: Teks apa saja

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

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

Informasi tanggal / waktu dari file referensi:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

Menggunakannya dalam skrip CMD untuk mendapatkan informasi tahun, bulan, hari, waktu:

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

Menggunakannya dalam skrip CMD untuk mendapatkan cap waktu dalam format apa pun yang diperlukan:

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

Mengekstrak informasi tanggal / waktu dari file referensi apa pun.

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

Menambahkan ke file informasi tanggal / waktu:

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 adalah bagian dari alat GNU gratis yang tidak memerlukan instalasi.

CATATAN: Menyalin date.exeke direktori apa pun yang berada di jalur pencarian dapat menyebabkan skrip lain gagal yang menggunakan perintah bawaan Windows date.

Uri Liebeskind
sumber
4
Jauh lebih baik daripada solusi aneh yang lebih populer di atas, tetapi saya harus menambahkan / t untuk menghindari prompt pada Windows 8.1
rainabba
6
Built-in Windows 8.1 date.exetampaknya tergantung pada lokal. Ini mengembalikan tanggal dalam dd / MM / yyyy pada sistem saya, jika itu lokal-independen saya harapkan baik MM / dd / yyyy atau yyyy-MM-dd. Saya tidak berpikir jawaban ini berbicara tentang date.exe built-in tetapi beberapa versi pihak ketiga.
SSS
1
itu lokal independen jika Anda memberikannya dengan format yang diinginkan pada baris perintah
terrinecold
3
Harap perhatikan bahwa date.exe (bagian dari UnxUtils) tidak sama dengan perintah bawaan. Jadi, jika Anda harus menambahkan / t perintah tanggal windows dijalankan. Jika sesuatu seperti date.exe + "% Y-% m-% d" berfungsi, Anda telah menginstal UnxUtils dengan benar. :-)
just.do.it
Apakah mungkin untuk memuat file dengan tanggal yang dibuat menggunakan xp_cmdshell di SQL Server? Saya telah mencoba perintah "forfiles" tetapi tidak berhasil. Saya telah mengajukan pertanyaan tentang stackoverflow, silakan lihat tautan @ stackoverflow.com/q/32293517/3327081
kolunar
105

Dua cara lagi yang tidak tergantung pada pengaturan waktu (keduanya diambil dari : Bagaimana mendapatkan data / waktu independen dari lokalisasi:) . Dan keduanya juga mendapatkan hari dalam seminggu dan tidak satupun dari mereka memerlukan izin admin !:

  1. MAKECAB - akan bekerja pada SETIAP sistem Windows (cepat, tetapi membuat file temp kecil) (skrip foxidrive):

    @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
    

    Informasi lebih lanjut tentang fungsi kencan .

  2. ROBOCOPY - ini bukan perintah asli untuk Windows XP dan Windows Server 2003, tetapi dapat diunduh dari situs microsoft . Tetapi built-in dalam segala hal mulai dari Windows Vista dan di atasnya:

    @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
    

    Dan tiga cara lagi yang menggunakan bahasa skrip Windows lainnya. Mereka akan memberi Anda lebih banyak fleksibilitas misalnya Anda bisa mendapatkan minggu dalam setahun, waktu dalam milidetik dan sebagainya.

  3. JScript / batch hybrid (harus disimpan sebagai .bat). JScript tersedia di setiap sistem dari NT dan di atasnya, sebagai bagian dari Windows Script Host ( meskipun dapat dinonaktifkan melalui registri, ini adalah kasus yang jarang terjadi ):

    @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 ( Apakah mungkin untuk menanamkan dan mengeksekusi VBScript dalam file batch tanpa menggunakan file sementara? ) Kasus yang sama seperti JScript, tetapi hibridisasi tidak begitu sempurna:

    :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 - dapat diinstal pada setiap mesin yang memiliki .NET - unduh dari Microsoft ( v1 , v2 , v3 (hanya untuk Windows 7 ke atas)). Itu diinstal secara default pada segala sesuatu dari Windows 7 / Windows Server 2008 dan di atas:

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

    Untuk menggunakannya dari file batch:

    for /f "delims=" %%# in ('powershell get-date -format "{dd-MMM-yyyy HH:mm}"') do @set _date=%%#
    
  6. Self-compiled jscript.net/batch (tidak pernah melihat mesin Windows tanpa .NET, jadi saya pikir ini adalah perangkat yang cukup portabel):

    @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 Ini tidak bisa mendapatkan tahun dan hari dalam seminggu. Ini relatif lambat dan juga membuat file sementara dan didasarkan pada waktu yang diletakkan logman pada file log-nya. Ini akan bekerja pada semuanya mulai dari Windows XP dan di atasnya. Mungkin tidak akan pernah digunakan oleh siapa pun - termasuk saya - tetapi satu cara lagi ...

    @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. Satu lagi cara dengan WMIC yang juga memberikan minggu dalam setahun dan hari dalam seminggu, tetapi bukan milidetik (untuk milidetik periksa jawaban foxidrive):

    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. Menggunakan TYPEPERF dengan beberapa upaya untuk menjadi cepat dan kompatibel dengan pengaturan bahasa yang berbeda dan secepat mungkin:

    @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 memungkinkan memanggil metode JavaScript yang mirip dengan metode JScript yang ditunjukkan pada # 3 di atas. Ingatlah bahwa properti objek Tanggal JavaScript yang melibatkan nilai bulan diberi nomor dari 0 hingga 11, bukan 1 hingga 12. Jadi nilai 9 berarti Oktober.

    <!-- : 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>
    
npocmaka
sumber
2
untuk powershell C: \> untuk / f %% i in ('powershell get-date -format "{yyyyMMdd_HHmmss}"') tetapkan datetime = %% i C: \> echo% datetime%
Samuel
1
makecab: ini berfungsi dengan membuat file bernama ~.rpt, dan mencari stringdi dalamnya, dimulai dengan makecab, yang merupakan garis seperti MakeCAB Report: Tue Sep 02 22:15:57 2014. bagi saya perintah ini tidak dilokalkan itu lokal independen. Trik ini mengandalkan itu. Mari berharap itu tidak akan terjadi, atau waspadalah!
n611x007
10
Saya menikmati teks pembuka "Dua lagi ..." diikuti oleh 8 solusi.
Adam Smith
1
Apa, tidak mshtahibrida? :) Keberatan jika saya mengedit jawaban Anda dan menambahkannya? Ini tampaknya menjadi koleksi terbaik solusi esoteris, dan sepertinya mshtatermasuk di sini.
rojo
1
Solusi yang diterima tidak akan bekerja untuk saya tidak peduli apa yang saya coba. Beberapa dari solusi ini bekerja untuk saya. (Batch dan Powershell).
Brett Tunggu
44

Berikut varian dari alt.msdos.batch.nt yang berfungsi secara lokal-mandiri

Letakkan ini di file teks, mis. 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<-------------

Agar kode berfungsi sans msg kesalahan ke stderr, saya harus menambahkan tanda kutip tunggal arount penugasan variabel untuk %% a, %% b dan %% c. Lokal saya (PT) menyebabkan kesalahan pada satu tahap dalam perulangan / parsing di mana hal-hal seperti "set = 20" dieksekusi. Kutipan menghasilkan token (meskipun kosong) untuk sisi kiri pernyataan penugasan.

Kelemahannya adalah nama variabel lokal yang berantakan: 'yy', 'mm' dan 'dd'. Tapi hei, siapa peduli!

vMax
sumber
3
Ini sempurna dan merupakan pendekatan paling sederhana dan paling elegan yang pernah saya lihat sampai saat ini.
Doug
2
Lihat juga peningkatan Jeroen , diperlukan karena tidak semua lokal menggunakan string dd, mmdan yydalam output dari echo:^|date.
Arjan
tidak berfungsi di semua lokal. (Dalam bahasa Jerman datememberi Geben Sie das neue Datum ein: (TT-MM-JJ), di mana JJnaskah Anda rusak (diharapkan YY))
Stephan
35

Saya menggunakan ini (sekali lagi bukan wilayah independen (UK))

set bklog=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%%time:~3,2%
kebiruan
sumber
Lihat Cmd.exe Variabel Lingkungan dengan Colon dan Tilde pada teknik yang sedikit diketahui tetapi sangat efisien ini. (
Penunjuk
Berikut Referensi File Batch Microsoft untuk Windows XP . Referensi itu termasuk Menggunakan parameter batch . Sayangnya, tidak ada diskusi tentang teknik 'mengiris'.
DavidRR
Ini tidak bekerja untuk saya. Mungkin itu ada hubungannya dengan pengaturan regional? Saya mendapatkan output "/ 15 / - 1-We_1009" ketika menjalankannya pada hari Rabu, 15 Oktober 2014.
Joel B
26

Empat baris pertama dari kode ini akan memberi Anda variabel YY DD MM YYYY HH Min Sec yang dapat diandalkan di Windows XP Professional dan lebih tinggi.

@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
foxidrive
sumber
Sempurna, ini adalah solusi terbaik bagi saya karena memanggil PS akan menghasilkan tampilan teks cmd menjadi lucu.
Ste
25

Sayangnya ini tidak kebal terhadap pengaturan regional, tetapi ia melakukan apa yang Anda inginkan.

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%

Luar biasa hal-hal yang dapat Anda temukan di Wikipedia .

Mark tebusan
sumber
1
Tandai - Ditemukan Variabel Lingkungan Cmd.exe dengan Colon dan Tilde yang menjelaskan teknik 'pengiris' variabel yang ditampilkan dalam jawaban Anda. Tidak menemukan info itu lagi di artikel Wikipedia. Ingin mencari referensi resmi dari Microsoft.
DavidRR
1
Berikut Referensi File Batch Microsoft untuk Windows XP . Referensi itu termasuk Menggunakan parameter batch . Sayangnya, tidak ada diskusi tentang teknik 'mengiris'.
DavidRR
18

Silakan gunakan skrip berikut untuk mendapatkan hari ini di baris perintah:

echo %Date:~0,3%day
sudipto roy
sumber
8
Dimainkan sedikit dengan ini, ini adalah yang terpendek yang saya temukan untuk mendapatkan Tanggal dan Waktu: gema% tanggal%% waktu%
loomi
15

Cara lain ( kredit ):

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

Perhatikan bahwa kedua jawaban saya di sini masih bergantung pada urutan hari dan bulan sebagaimana ditentukan oleh pengaturan regional - tidak yakin bagaimana cara mengatasinya.

J c
sumber
14
"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.zip
DigiP
sumber
http://www.dotnetperls.com/7-zip-examplesmemiliki beberapa poin yang baik semoga bermanfaat bagi seseorang di masa depan.
Saravanan
13

Ini tidak terlalu singkat tetapi mungkin cara yang lebih fleksibel ( kredit ):

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%
J c
sumber
10

Berikut cara mendapatkan waktu kencan dalam satu baris:

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

Di AS ini akan menampilkan "yyyy-mm-dd hhmm". Pengaturan regional yang berbeda akan menghasilkan output% date%% yang berbeda, tetapi Anda dapat mengubah urutan token.

Jika Anda menginginkan format yang berbeda, ubah pernyataan gema dengan mengatur ulang token atau menggunakan pemisah yang berbeda (atau tidak ada).

Matthew Johnson
sumber
Apakah ada cara untuk mendapatkan waktu dalam format 12 jam dan juga untuk menampilkan informasi AM atau PM?
Sangli
9

Cukup gunakan baris ini:

PowerShell -Command "get-date"
gdelfino
sumber
9

Jawaban singkat :

 :: 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 

Jawaban panjang

    @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
Yordan Georgiev
sumber
:: in cmd untuk / f% i in ('PowerShell -Command "get-date" -format "yyyyMMdd"') lakukan set yyyyMMdd =% i :: dalam skrip cmd untuk / f %% i in ('PowerShell -Command "get-date" -format "yyyyMMdd" ') lakukan set yyyyMMdd = %% i
Yordan Georgiev
8

Solusi one-liner Matthew Johnson untuk mendapatkan tanggal dan waktu one-liner fasih dan bermanfaat.

Namun itu membutuhkan modifikasi sederhana untuk bekerja dari dalam file batch:

for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
John Langstaff
sumber
1
Tidak berfungsi di CMD (%% a tidak terduga saat ini) atau di PowerShell (Pembukaan tidak ada '(' setelah kata kunci untuk) pada Windows 8.1
rainabba
3
Rainabba, itu persis kesalahan yang Anda dapatkan ketika perintah itu dikeluarkan dari baris CMD . Namun, " dari dalam file batch ", perintah mengembalikan "2014-01-30 1324".
John Langstaff
1
atau lebih sederhana tanpa loopecho %date:/=-%%time::=-%
Gerhard Barnard
7

Dan di sini adalah file batch yang sama untuk porsi waktu.

:: 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

Jeroen Wiert Pluimer
sumber
Hai, saya dapat memuat file menurut tanggal Diubah menggunakan perintah di bawah ini, z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path” Tapi saya ingin tahu cara memuat file menurut tanggal Dibuat. Bantuan apapun akan sangat dihargai. Sebuah pertanyaan telah diajukan pada stackoverflow tetapi belum ada jawaban. Silakan lihat tautan untuk detail stackoverflow.com/q/32293517/3327081
kolunar
1
Ajukan pertanyaan baru tentang itu. Saya tidak pernah menggunakan forfiles.
Jeroen Wiert Pluimers
7

Saya mengubah jawaban dengan file batch dari vMax sehingga berfungsi dengan bahasa Belanda juga.
Belanda - terus-menerus seperti kita - memiliki beberapa perubahan dalam %date%, date/tdandate istirahat yang asli batch-file tersebut.

Alangkah baiknya jika beberapa orang dapat memeriksa ini terhadap lokal Windows lain juga, dan melaporkan kembali hasilnya.
Jika file batch gagal di lokasi Anda, silakan sertakan output dari kedua pernyataan ini pada prompt perintah:
echo:^|date
date/t

Ini adalah contoh dari output yang harus Anda dapatkan dari file batch:

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

Berikut adalah kode yang direvisi dengan komentar tentang alasannya:

:: /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 [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

Jeroen Wiert Pluimer
sumber
2
Beberapa memang menggunakan tahun-tahun pertama, atau tidak memiliki angka nol di depan; lihat format Tanggal Wikipedia berdasarkan negara . Orang Prancis mungkin menggunakan jj-mm-aaaauntuk jour, mois, annee? Italia mungkin gg/mm/aaaauntuk giorno, mese, anno? Jerman tt.mm.jjjjuntuk Tag, Monat, Jahr? Tapi kemudian: Saya kira di sebagian besar negara hanya beberapa bahasa yang digunakan. Seperti di Belanda memang Windows akan sering menjadi bahasa Inggris atau Belanda, tidak banyak lagi. Cukup baik untukku.
Arjan
2
Sebagai tambahan: versi lain dalam fitur Tersembunyi file batch Windows kurang sempurna (perlu perbaikan untuk Belanda jj, dan tidak memberlakukan tahun 4 digit), tetapi digunakan shiftuntuk membuang hari seperti Monatau ma. Hanya berbeda.
Arjan
4
Itu rusak pada sistem Jerman. Tahun dan bulan bekerja, tetapi hari gagal karena "hari" dimulai dengan "T" dalam bahasa Jerman ("Tag"), bukan "d". String format pada prompt adalah (TT-MM-JJ), date/toutputnya adalah 23.06.2012. / cc @Arjan
balpha
2
Lain selain: satu juga bisa mendapatkan pesanan dari registri , menggunakan reg query "HKCU\Control Panel\International" /vShortDate. Hati-hati saat menguji: untuk prompt perintah terbuka, mengubah pengaturan Panel Kontrol juga mengubah format yang digunakan untuk menampilkan tanggal (untuk keduanya datedan date /tdan echo %date%), tetapi pada Windows 7 TIDAK mengubah format untuk tanggal baru! Seperti mengubah singkat format tanggal saya ke YY/MM/dd, membuat saya: The current date is: 12/06/23 Enter the new date: (mm-dd-yy). Membuka command prompt baru akan memperbaikinya.
Arjan
2
@Arjan ini seharusnya reg query "HKCU\Control Panel\International" /v sShortDate.
tricasse
6

Inilah yang saya gunakan:

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

Jika Anda ingin gagasan lebih lanjut untuk mengotomatiskan cadangan ke arsip 7-Zip, saya memiliki proyek bebas / terbuka yang dapat Anda gunakan atau tinjau untuk gagasan: http://wittman.org/ziparcy/

micahwittman
sumber
Pada sistem saya% date% berisi "Sel 10/14/2008". Jadi, Anda masih harus memotong (atau berurusan dengan) "Sel" dan karakter ruang.
BoltBait
Hai @ micahwittman. Apakah mungkin untuk memuat file dengan tanggal yang dibuat menggunakan xp_cmdshell di SQL Server? Saya telah mencoba perintah "forfiles" tetapi tidak berhasil. Saya telah mengajukan pertanyaan tentang stackoverflow, silakan lihat tautan @ stackoverflow.com/q/32293517/3327081
kolunar
5

Saya punya masalah serupa. Saya memiliki unduhan harian otomatis dari server FTP dari file yang dienkripsi. Saya ingin mendekripsi file menggunakan gpg, mengubah nama file ke tanggal saat ini (format YYYYMMDD) dan meletakkan file yang didekripsi ke folder untuk departemen yang benar.

Saya pergi melalui beberapa saran untuk mengubah nama file sesuai tanggal dan tidak beruntung sampai saya menemukan solusi sederhana ini.

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

Ini bekerja dengan sempurna (yaitu, nama file keluar sebagai "2011-06-14.txt").

(Sumber)

KChiki
sumber
5

Fungsi yang didasarkan pada 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

Terbalik: Wilayah independen. Kelemahan: Hanya administrator sistem yang dapat menjalankan wmic.exe.

Pemakaian:

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

Ini menggemakan string seperti ini:

2014-01-22 12:51:53

Perhatikan bahwa parameter fungsi di luar Parameter - yaitu, Anda harus memberikan nama variabel, bukan nilai.

Semua parameter bersifat opsional, jadi call:Now Y Mini panggilan yang valid jika Anda hanya ingin mendapatkan tahun dan bulan.

Tomalak
sumber
4

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

Lihat di dalam file ZIP untuk sesuatu yang disebut "Date.exe" dan beri nama "DateFormat.exe" (untuk menghindari konflik).

Masukkan ke dalam folder system32 Windows Anda.

Ini memiliki banyak opsi "tanggal keluaran".

Untuk bantuan, gunakan DateFormat.exe --h

Saya tidak yakin bagaimana Anda akan memasukkan hasilnya ke variabel lingkungan ... menggunakan SET.

Sally
sumber
1
Terima kasih, meskipun pertanyaan ini khusus untuk melakukannya tanpa mengunduh alat tambahan.
Rory
3

Solusi independen regional yang menghasilkan format tanggal ISO:

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:

Apa yang masih bisa dioptimalkan: Proses lain mungkin bingung jika menggunakan format tanggal dalam periode singkat ketika sedang dimodifikasi. Jadi parsing output sesuai dengan format string yang ada bisa 'lebih aman' - tetapi akan lebih rumit

V15I0N
sumber
Anda bisa reg permintaan Idate ( technet.microsoft.com/en-us/library/cc978637.aspx ) dan kondisional melanjutkan (3 nilai yang mungkin menurut TechNet) - meskipun saya belum mencoba ini.
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 [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
Adolfo
sumber
0

Diberi lokalitas yang dikenal, untuk referensi dalam bentuk fungsional. The ECHOTIMESTAMPpanggilan menunjukkan bagaimana untuk mendapatkan timestamp ke dalam variabel ( DTSdalam contoh ini.)

@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

Dan disimpan ke file, timestamp.bat, ini hasilnya:

masukkan deskripsi gambar di sini

bvj
sumber
Tampaknya ini dilengkapi dengan masalah regional - ini tidak berfungsi di semua mesin bahasa Inggris.
Tidak heran, @SteveFest. Jika mungkin untuk sementara mengatur lokasi, itu mungkin membantu untuk memberikan solusi global, tetapi tampaknya perlu untuk mengetahui wilayah tersebut terlebih dahulu. Apakah lokal Anda en-US atau en-SomewhereElse?
bvj
@SteveFest Saya kira akan mungkin untuk membangun daftar lokal di mana masing-masing menyertakan ekspresi tanggal / waktu dengan sampel untuk divalidasi. Saya sangat sibuk, tetapi saya akan mencoba memperbarui jawaban saya untuk menggambarkan. Bisakah Anda menunjukkan kepada saya sampel waktu / tanggal keluaran HK? Saya mungkin bodoh mengasumsikan digit cetak zh-HK pada offset tetap.
bvj
zh-HK: (yy)yy年m月d日 hh:mm- tidak ada nol di depan. (yy) dapat diabaikan karena kami memiliki 2 digit tahun, atau 4 digit tahun. Tetapi harap dicatat satu hal: format waktu tanggal dapat diubah per mesin.
Terima kasih @SteveFest, saya akan menindaklanjutinya dalam beberapa minggu. Jalankan systeminfodi CLI dan beri tahu saya apa yang Anda lihat System Locale. Program membutuhkan waktu untuk berjalan, tetapi mungkin hasil lokal dapat di-cache dan selanjutnya digunakan untuk mengindeks format timestamp.
bvj
0

Dengan Windows 7, kode ini berfungsi untuk saya:

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%
Frizz1977
sumber
Dan lagi. Sangat menyenangkan bahwa ini bekerja pada mesin Anda, tetapi Anda melewatkan intinyaindependent of the regional settings of the machine
jeb
-1

Saya perhatikan bahwa o / p tidak meminta solusi independen kawasan. Solusi saya adalah untuk Inggris.

Ini adalah solusi paling sederhana, solusi 1-baris, untuk digunakan dalam file Batch:

FOR /F "tokens=1-3 delims=/" %%A IN ("%date%") DO (SET today=%%C-%%B-%%A)
echo %today%
Ed999
sumber
2
Dia menyebutkan solusi independen daerah ...particularly because of the regional settings issue with using date. Btw. Solusi Anda sama dengan dua puluh jawaban lainnya.
jeb
Ya, tapi milik saya sebenarnya (opsional) dapat digunakan pada baris perintah. Apa gunanya memposting 35 baris kode, jika satu baris kode akan memberikan solusi yang sama?
Ed999
Saya tidak dapat melihat perbedaan yang relevan dengan jawaban lama @Matthew Johnson, 2010 atau @KChiki, 2011
jeb
meskipun jawaban ini tidak benar, untuk mengomentari jawaban yang sebenarnya, untuk loop tidak diperlukan di sini ketika Anda bisa melakukannyaecho %date:/=-%
Gerhard Barnard
Tidak. Jika Anda menghilangkan loop FOR, tidak ada variabel yang dapat dibuat, dan tanggal di mana Anda mengalami kesulitan untuk mengekstrak masih tidak berguna. Dengan loop FOR, variabel yang dibuat oleh loop tersedia untuk digunakan di bagian lain skrip. Saya sangat mencela menggunakan lusinan baris kode untuk membuat loop FOR, ketika hanya 1 baris yang diperlukan. Dan saya sangat mencela memposting solusi jalur non-perintah, di mana o / p secara khusus meminta solusi satu baris untuk digunakan pada baris perintah.
Ed999
-3

Saya tahu bahwa ada banyak cara yang telah disebutkan. Tapi di sini adalah cara saya untuk memecahnya untuk memahami bagaimana hal itu dilakukan. Semoga bermanfaat bagi seseorang yang menyukai metode langkah demi langkah.

:: 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
Gifcrazy
sumber
3
Anda kehilangan titikindependent of the regional settings of the machine
jeb