it-swarm.asia

كيف يمكنك الحصول على الوقت الحالي؟

التحديث: الآن ، بعد عام 2016 ، سأستخدم PowerShell لهذا ما لم يكن هناك سبب وجيه متوافق مع الإصدارات السابقة لذلك ، خاصة بسبب مشكلة الإعدادات الإقليمية باستخدام date. انظر @ npocmaka's https://stackoverflow.com/a/19799236/8479


ما هي عبارة (بيانات) سطر أوامر Windows التي يمكنني استخدامها للحصول على وقت البيانات الحالي بتنسيق يمكنني وضعه في اسم ملف؟

أريد أن يكون لديك ملف .bat يضيف دليلًا إلى أرشيف في التاريخ والوقت الحاليين كجزء من الاسم ، على سبيل المثال ، Code_2008-10-14_2257.Zip. هل هناك أي طريقة سهلة يمكنني القيام بها ، بغض النظر عن الإعدادات الإقليمية للجهاز؟

لا أمانع حقًا بتنسيق التاريخ ، من الناحية المثالية سيكون الأمر yyyy-mm-dd ، لكن أي شيء بسيط جيد.

لدي حتى الآن هذا ، والذي يعطيني على جهازي 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

أستطيع أن أعيش مع هذا ، ولكن يبدو أنه قليل الكعب. من الناحية المثالية سيكون أكثر إيجازًا ويكون التنسيق المذكور مسبقًا.

أنا أستخدم Windows Server 2003 و Windows XP Professional. لا أرغب في تثبيت أدوات مساعدة إضافية لتحقيق ذلك (على الرغم من أنني أدرك أن هناك بعضًا من شأنه إجراء تنسيق تاريخ Nice).

498
Rory

راجعملف دفعي Windows (.bat) للحصول على التاريخ الحالي بتنسيق 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%

إذا كنت تفضل الوقت بالتنسيق 24 ساعة/العسكرية ، يمكنك استبدال السطر FOR الثاني بهذا:

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

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

إذا كنت تريد التاريخ بشكل مستقل عن طلب يوم/شهر بالمنطقة ، يمكنك استخدام "WMIC os GET LocalDateTime" كمصدر ، لأنه في ترتيب 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
التاريخ المحلي هو [2012-06-19 10: 23: 47.048]

637
Jay

تاريخيا تاريخيا تحليل الوقت

تنسيق الإخراج الخاص بـ %DATE% والأمر dir يعتمد على المستوى الإقليمي وبالتالي لا قوي ولا ذكي. date.exe (جزء من UnxUtils ) يقدم أي معلومات التاريخ والوقت في أي تنسيق يمكن تصوره. يمكنك أيضًا استخراج معلومات التاريخ/الوقت من أي ملف باستخدام date.exe.

أمثلة: (في نص cmd استخدم ٪٪ بدلاً من٪)

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: أي نص

date.exe +"Text: %y/%m/%d-any text-%H.%M"
النص: 09/12/22 - أي نص - 18.55

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

معلومات التاريخ/الوقت من ملف مرجعي:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

استخدامه في برنامج نصي CMD للحصول على معلومات السنة والشهر واليوم والوقت:

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

استخدامه في برنامج نصي CMD للحصول على طابع زمني بأي تنسيق مطلوب:

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

استخراج معلومات التاريخ/الوقت من أي ملف مرجعي.

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

إضافة إلى ملف معلومات التاريخ/الوقت:

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 هو جزء من أدوات GNU المجانية التي لا تحتاج إلى تثبيت.

ملاحظة: قد يتسبب نسخ date.exe في أي دليل موجود في مسار البحث في فشل البرامج النصية الأخرى التي تستخدم أمر Windows المدمج في date.

100
Uri Liebeskind

طريقتان آخرتان لا تعتمدان على إعدادات الوقت (كلاهما مأخوذان من : كيف تحصل على بيانات/وقت مستقل عن التعريب: ). وكلاهما يحصلان أيضًا على يوم من أيام الأسبوع ولا يتطلب أي منهما أذونات المسؤول !:

  1. MAKECAB- ستعمل على كل نظام ويندوز (سريع ، لكنه يخلق ملف مؤقت مؤقت) (البرنامج النصي 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
    

    مزيد من المعلومات حول وظيفة get-date .

  2. ROBOCOPY- إنه ليس أمرًا أصليًا لنظامي التشغيل Windows XP و Windows Server 2003 ، ولكنه يمكن أن يكون تم تنزيله من موقع Microsoft . ولكنه مدمج في كل شيء من نظام التشغيل Windows Vista وما فوقه:

    @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
    

    وثلاث طرق أخرى تستخدم لغات برامج Windows الأخرى. سوف يمنحك المزيد من المرونة على سبيل المثال يمكنك الحصول على أسبوع من السنة ، والوقت بالميلي ثانية وهلم جرا.

  3. JScript/batch hybrid (يلزم حفظها كـ .bat). JScript متاح في كل نظام من أنظمة NT وما فوق ، كجزء من Windows Script Host ( على الرغم من أنه يمكن تعطيله من خلال السجل ، فهو حالة نادرة ):

    @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 ضمن ملف دفعي دون استخدام ملف مؤقت؟) نفس الحالة مثل JScript ، ولكن التهجين ليس كذلك في احسن الاحوال:

    :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 - يمكن تنزيله من Microsoft ( v1 ، v2 ، v3 (فقط لنظام التشغيل Windows 7 وما فوق))). يتم تثبيته بشكل افتراضي على كل شيء من نظام التشغيل Windows 7/Windows Server 2008 والإصدارات الأحدث:

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

    لاستخدامه من ملف دفعي:

    for /f "delims=" %%# in ('powershell get-date -format "{dd-MMM-yyyy HH:mm}"') do @set _date=%%#
    
  6. jscript.net/batch مترجم ذاتيًا (لم يسبق له مثيل على جهاز يعمل بنظام Windows بدون .NET ، لذلك أعتقد أن هذا جهاز محمول للغاية):

    @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 هذا لا يمكن الحصول على سنة ويوم الأسبوع. إنه بطيء نسبيًا ويقوم أيضًا بإنشاء ملف مؤقت ويستند إلى الطوابع الزمنية التي يضعها logman على ملفات السجل الخاصة به. ستعمل على كل شيء من نظام التشغيل Windows XP وما فوق. من المحتمل ألا يستخدمه أي شخص - بمن فيهم أنا - ولكنه طريقة أخرى ...

    @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والتي تعطي أيضًا أسبوعًا من السنة ويوم الأسبوع ، ولكن ليس بالميلي ثانية (بالنسبة للمللي ثانية تحقق من إجابة 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. استخدامTYPEPERFمع بعض الجهود لتكون سريعة ومتوافقة مع إعدادات اللغة المختلفة وبأسرع وقت ممكن:

    @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يسمح باستدعاء طرق جافا سكريبت شبيهة بطريقة JScript الموضحة في # 3 أعلاه. ضع في اعتبارك أن خصائص كائن Date في JavaScript والتي تتضمن قيم الشهر مرقمة من 0 إلى 11 ، وليس من 1 إلى 12. لذا فإن القيمة 9 تعني أكتوبر.

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

إليك البديل من alt.msdos.batch.nt الذي يعمل محليًا بشكل مستقل.

ضع هذا في ملف نصي ، على سبيل المثال 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<-------------

للحصول على التعليمات البرمجية للعمل sans error msg's to stderr ، اضطررت إلى إضافة علامات الاقتباس المفردة حول تخصيصات ٪٪ a و ٪٪ b و ٪٪ c. تسببت لغتي (PT) في حدوث خطأ في إحدى المراحل في الحلقات/التحليل حيث تم تنفيذ أشياء مثل "set = 20". تعطي علامات الاقتباس رمزًا مميزًا (وإن كان فارغًا) للجانب الأيسر من بيان المهمة.

الجانب السلبي هو أسماء متغير اللغة الفوضى: 'yy' و 'mm' و 'dd'. لكن مهلا ، من يهتم!

42
vMax

أنا استخدم هذا (مرة أخرى ليست مستقلة عن المنطقة (المملكة المتحدة))

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

لسوء الحظ ، هذه ليست محصنة ضد الإعدادات الإقليمية ، ولكنها تفعل ما تريد.

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%

مدهش الاشياء التي يمكنك العثور عليها على ويكيبيديا .

24
Mark Ransom

الرجاء استخدام البرنامج النصي التالي للحصول على اليوم الحالي في سطر الأوامر:

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

ستمنحك الأسطر الأربعة الأولى من هذا الرمز متغيرات YY DD MM YYYY HH Min Sec الموثوقة في Windows XP Professional وما فوق.

@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

طريقة أخرى ( الائتمان ):

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

لاحظ أن كلا من إجاباتي هنا لا تزال تعتمد على ترتيب اليوم والشهر وفقًا لما تحدده الإعدادات الإقليمية - لست متأكدًا من كيفية التغلب على ذلك.

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

هذا ليس أكثر إيجازًا ولكنه قد يكون أكثر مرونة ( ائتمان ):

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

إليك طريقة للحصول على وقت التاريخ في سطر واحد:

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

في الولايات المتحدة ، سينتج عن ذلك "yyyy-mm-dd hhmm". ستؤدي الإعدادات الإقليمية المختلفة إلى إخراج٪ date٪ مختلف ، ولكن يمكنك تعديل ترتيب الرمز المميز.

إذا كنت تريد تنسيقًا مختلفًا ، فقم بتعديل عبارة الارتداد عن طريق إعادة ترتيب الرموز المميزة أو استخدام فواصل مختلفة (أو لا).

9
Matthew Johnson

فقط استخدم هذا الخط:

PowerShell -Command "get-date"
8
gdelfino

اجابة قصيرة :

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

اجابة طويلة

    @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 حل الخطوط الملاحية المنتظمة للحصول على تاريخ ووقت الخط الواحد هو بليغ ومفيد.

ومع ذلك ، فإنه يحتاج إلى تعديل بسيط للعمل من داخل ملف دفعي:

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

وهنا ملف دفعي مماثل لجزء الوقت.

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

7
Jeroen Wiert Pluimers

لقد قمت بتغيير الإجابة مع ملف الدُفعات من vMax بحيث تعمل مع اللغة الهولندية أيضًا.
الهولندية - الثابتة كما نحن - لديها بعض التغييرات في %date% و date/t و date التي تكسر الملف الدفعي الأصلي.

سيكون لطيفًا إذا تمكن بعض الأشخاص من التحقق من ذلك مقابل لغات Windows الأخرى أيضًا ، وتقديم تقرير بالنتائج.
إذا فشل ملف الدُفعات في موقعك ، فيرجى تضمين إخراج هاتين العبارتين في موجه الأوامر:
echo:^|date
date/t

هذه عينة من الإخراج الذي يجب أن تحصل عليه من الملف الدفعي:

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

إليك الكود المنقح مع تعليقات حول السبب:

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

7
Jeroen Wiert Pluimers

دالة تعتمد على 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

الاتجاه الصعودي: منطقة مستقلة. الجانب السلبي: يمكن لمسؤولي النظام فقط تشغيل wmic.exe.

الاستعمال:

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

هذا أصداء سلسلة مثل هذا:

2014-01-22 12:51:53

لاحظ أن معلمات الوظيفة خارج المعلمات - أي ، يجب عليك توفير أسماء المتغيرات بدلاً من القيم.

جميع المعلمات اختيارية ، لذلك call:Now Y M هي مكالمة صالحة إذا كنت تريد فقط الحصول على سنة وشهر.

6
Tomalak

هذا ما استخدمته:

::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 ، فلدي مشروع مجاني/مفتوح يمكنك استخدامه أو مراجعته للأفكار: http://wittman.org/ziparcy/

5
micahwittman

كان لدي مشكلة مماثلة. لديّ تنزيل يومي تلقائي من خادم FTP لملف مشفر. أردت فك تشفير الملف باستخدام gpg ، إعادة تسمية الملف إلى التاريخ الحالي (تنسيق YYYYMMDD) وإسقاط الملف الذي تم فك تشفيره إلى مجلد للإدارة الصحيحة.

مررت بالعديد من الاقتراحات لإعادة تسمية الملف وفقًا للتاريخ ولم يكن لدي أي حظ حتى تعثرت على هذا الحل البسيط.

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

لقد نجحت تمامًا (على سبيل المثال ، يظهر اسم الملف باسم "2011-06-14.txt").

(المصدر)

4
KChiki

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

ابحث داخل ملف Zip عن شيء يسمى "Date.exe" وأعد تسميته "DateFormat.exe" (لتجنب التعارضات).

ضعه في مجلد Windows system32.

لديها الكثير من خيارات "إخراج التاريخ".

للمساعدة ، استخدم DateFormat.exe --h

لست متأكدًا من كيفية وضع مخرجاته في متغير بيئة ... باستخدام SET.

4
Sally

الحل المستقل الإقليمي الذي ينشئ تنسيق تاريخ 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:

ما الذي لا يزال بالإمكان تحسينه: قد تتشوش العمليات الأخرى في حالة استخدام تنسيق التاريخ في الفترة القصيرة أثناء تعديله. لذا فإن تحليل الناتج وفقًا لسلسلة التنسيق الحالية قد يكون "أكثر أمانًا" - ولكنه سيكون أكثر تعقيدًا

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

إعطاء محلية معروفة ، للرجوع إليها في شكل وظيفي. توضح المكالمة ECHOTIMESTAMP كيفية الحصول على الطابع الزمني إلى متغير (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

وحفظها في ملف ، timestamp.bat ، وهنا الإخراج:

 enter image description here

0
bvj

مع نظام التشغيل Windows 7 ، يعمل هذا الرمز لي:

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

أنا أفضل أن أقوم بذلك بأقصر فترة ممكنة ، لذا فبدون شهر وسنة يناسب ما يكفي للتحديث اليومي

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

عندما يتعلق الأمر بإصدار تطبيق ، يتم نشره في تحديث يومي جديد باستخدام أداة إنشاء

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

من خلال ذلك ، سيكون من السهل تحديث التطبيق بالكامل بنفسه تلقائيًا

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

سيكون ملف الإخراج جاهزًا للتحديث المحلي دون لمس أسماء الملفات الخاصة به

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