উইন্ডোজ ব্যাচ: ভেরিয়েবলে ফর্ম্যাট করা তারিখ


105

আমি কীভাবে YYYY-MM-DD ফর্ম্যাটে বর্তমান তারিখটিকে উইন্ডোজ .bat ফাইলের কিছু পরিবর্তনশীল হিসাবে সংরক্ষণ করব?

ইউনিক্স শেল অ্যানালগ:

today=`date +%F`
echo $today



1
আদর্শ, এই প্রশ্নের উত্তর এটির সাথে মোকাবিলা করার বেশ ভয়ঙ্কর এবং ত্রুটি-প্রবণ উপায় ব্যবহার করে। আমি এটি ব্যবহার না করার পরামর্শ দিই।
জোয়

এই লিঙ্কটি নীচের উত্তরগুলি বুঝতে সহায়তা করে। ss64.com/nt/for_f.html
smwikedia

উত্তর:


151

আপনি স্থানীয় তারিখটি স্থানীয়ভাবে ব্যবহার করতে পারেন-অজানাস্টিক পদ্ধতিতে

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

তারপরে আপনি সাবস্ট্রিংগুলি ব্যবহার করে পৃথক অংশগুলি নিষ্কাশন করতে পারেন:

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

অন্য উপায়, যেখানে আপনি পৃথক অংশগুলি ধারণ করে এমন ভেরিয়েবলগুলি পাবেন, তা হ'ল:

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

আপনার পরিবর্তনশীল নেমস্পেসকে দূষিত করার ব্যয়ে সাবস্ট্রিংগুলিতে ফিডিংয়ের চেয়ে অনেক সুন্দর।

আপনার যদি স্থানীয় সময়ের পরিবর্তে ইউটিসি দরকার হয়, কম্যান্ডটি কম বেশি একই রকম:

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

1
@ user2023861 এটি প্রদর্শিত হয় যে আমি কমান্ড প্রম্পটটি খোলার পরেও, কমান্ডের অনুরোধের মুহুর্তে আমি সর্বদা সঠিক তারিখ / সময় পাই, আমি কমান্ড প্রম্পটটি খোলার সময় নয়।
এডিটিসি

5
নোট করুন যে আপনি উপরের লাইনটি একাধিকবার চালিয়ে গেলে আপনি প্রতিটি অনুরোধের জন্য একটি নতুন তারিখ পাবেন না, কারণ এটি ভেরিয়েবলটি অপরিজ্ঞাত করার জন্য পরীক্ষা করে। এটি প্রয়োজন কারণ for /fদুটি লাইনে ফিরে আসে, এর পরেরটি খালি one আপনি set MyDate=এর মধ্যে ব্যবহার করে সমাধান করতে পারেন । আমার ধারণা 2020861 ব্যবহারকারীর এটাই হোঁচট খেয়েছে।
জোয়ি

1
@ চার্লসউড, কমপক্ষে আমি আমার নিজের ব্যাচের ফাইলগুলিতে দৃust়তার জন্য চেষ্টা করি যদিও এই দিনগুলিতে আমি প্রায়শই এর পরিবর্তে পাওয়ারশেল ব্যবহার করি।
জোয়

1
ভেরিয়েবল আছে যা সেট হবে: Year, Month, Day, Hour, Minute, Second, Quarter, WeekInMonth,DayOfWeek
ব্যবহারকারী

2
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day% অবৈধ উত্তর: এটি এক অঙ্কের মাস এবং দিন ফেরত দেয় । শূন্য মাস এবং দিন থেকে তারিখের স্ট্রিং সহ কীভাবে 2-অঙ্কের বাম প্যাড পাবেন?
আন্দ্রেস

38

আপনি যদি কোনও ব্যাচের ফাইলে স্ট্যান্ডার্ড এমএস-ডস কমান্ড ব্যবহার করে এটি অর্জন করতে চান তবে আপনি ব্যবহার করতে পারেন:

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

আমি নিশ্চিত যে এটি আরও উন্নত করা যেতে পারে তবে এটি দিন (ডিডি), মাস (মিমি) এবং বছর (ইয়াই) এর জন্য 3 ভেরিয়েবলগুলিতে দেবে। এরপরে আপনার প্রয়োজন অনুসারে এটি আপনার ব্যাচের স্ক্রিপ্টে পরে ব্যবহার করতে পারেন।

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

যদিও আমি বুঝতে পেরেছি যে এই প্রশ্নের জন্য একটি উত্তর গৃহীত হয়েছে এই বিকল্প পদ্ধতিটি ডাব্লুএমআই কনসোলটি ব্যবহার না করে এটি অর্জনের জন্য অনেকে প্রশংসা করতে পারে, তাই আমি আশা করি এটি এই প্রশ্নের কিছুটা মূল্য যোগ করবে।


3
আমি দেখতে পেলাম যে উইন্ডোজ 7 বাক্সে আমার এটি সামান্য পরিবর্তন করা দরকার। টোকেনগুলি এক এক করে বাড়ানো দরকার: ... ফর / এফ "টোকেনস = 2,3,4 ইওল = / ডিলিমস = /" ...
জো জনস্টন

1
উইন সার্ভারে 2012 একই সাথে
অ্যাজুরে

34

date /Tকমান্ড প্রম্পটে ফর্ম্যাটটি সন্ধান করতে ব্যবহার করুন ।

যদি তারিখের ফর্ম্যাটটি Thu 17/03/2016এটির মতো ব্যবহার করা হয়:

set datestr=%date:~10,4%-%date:~7,2%-%date:~4,2%
echo %datestr%

1
এটি জিজ্ঞাসিত প্রশ্নের নিকটতম উত্তর। একটি সহজ ওয়ানলাইনার কেবল আমার প্রয়োজন ছিল, কোনও প্রোগ্রাম নয়।
ডিসিউকি

2
একমত। এগুলির কয়েকটি উত্তর প্রায় দেখতে "এমএস এসকিউএল সার্ভার ইনস্টল করুন, একটি এসকিউএল ক্লায়েন্টের সাথে সংযুক্ত করুন এবং কমান্ডটি কার্যকর করুন" এর মতো দেখায় SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
ইস্পির

2
আইএসও %date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
-8601

3
অন্যান্য প্রতিক্রিয়াগুলি প্রোগ্রামটির মতো দেখানোর কারণ হ'ল এই উত্তরটি সহজ হলেও এটি ব্যর্থ হবে যদি আপনার উইন্ডোজ আঞ্চলিক সেটিংসটি এই কোডটি প্রত্যাশা করে না (যেমন এই কোডটি প্রতিটি উইন্ডোজ সিস্টেমে কাজ করবে না )
ড্যানিয়েল স্কট

20

আরও দুটি উপায় যা সময়ের সেটিংসের উপর নির্ভর করে না (উভয়ই কীভাবে ডেটা / সময় স্থানীয়করণ থেকে স্বতন্ত্র পান তা নেওয়া হয় )। এবং উভয়ই সপ্তাহের দিন পান এবং তাদের কারওরই জন্য প্রশাসকের অনুমতি লাগে না!:

  1. মাকেকাব - প্রতিটি উইন্ডোজ সিস্টেমে কাজ করবে (দ্রুত, তবে একটি ছোট অস্থায়ী ফাইল তৈরি করে) (ফক্সিড্রাইভ স্ক্রিপ্ট):

    @echo off
    pushd "%temp%"
    makecab /D RptFileName=~.rpt /D InfFileName=~.inf /f nul >nul
    for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
        set "current-date=%%e-%%b-%%c"
        set "current-time=%%d"
        set "weekday=%%a"
    )
    del ~.*
    popd
    echo %weekday% %current-date% %current-time%
    pause
    
  2. রবকোপি - এটি উইন্ডোজ এক্সপি এবং উইন্ডোজ সার্ভার 2003 এর নেটিভ কমান্ড নয় , তবে এটি মাইক্রোসফ্ট সাইট থেকে ডাউনলোড করা যেতে পারে । তবে এটি উইন্ডোজ ভিস্তা এবং উপরের সমস্ত কিছুতে অন্তর্নির্মিত:

    @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
    

    এবং আরও তিনটি উপায় যা অন্যান্য উইন্ডোজ স্ক্রিপ্ট ভাষা ব্যবহার করে। তারা আপনাকে আরও নমনীয়তা দেবে যেমন আপনি বছরের সপ্তাহ, মিলিসেকেন্ডে সময় পেতে পারেন।

  3. জেএসক্রিপ্ট / ব্যাচ হাইব্রিড (হিসাবে সংরক্ষণ করা দরকার .bat)। উইন্ডোজ এনটি এবং তারপরের প্রতিটি সিস্টেমে উইন্ডোজ স্ক্রিপ্ট হোস্টের অংশ হিসাবে জেএসক্রিপ্ট পাওয়া যায় ( যদিও এটি রেজিস্ট্রি দিয়ে অক্ষম করা যায় এটি বিরল ঘটনা ):

    @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. ভিবিএস স্ক্রিপ্ট / ব্যাচ হাইব্রিড ( কোনও অস্থায়ী ফাইল ব্যবহার না করে কোনও ব্যাচ ফাইলের মধ্যে ভিবিএস স্ক্রিপ্ট এম্বেড করা এবং চালানো সম্ভব? ) একই ক্ষেত্রে কেএসপি, তবে সংকরন এতটা নিখুঁত নয়:

    :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. পাওয়ারশেল - প্রতিটি মেশিনে ইনস্টল করা যেতে পারে যার কাছে নেট আছে - মাইক্রোসফ্ট ( v1 , v2 , এবং v3 (শুধুমাত্র উইন্ডোজ 7 এবং উপরের জন্য)) থেকে ডাউনলোড করুন। উইন্ডোজ / / উইন ২০০৮ এবং তারপরে সমস্ত কিছুতে ডিফল্টরূপে ইনস্টল করা হয়েছে:

    C:\> powershell get-date -format "{dd-MMM-yyyy HH:mm}"
    
  6. স্ব-সংকলিত jscript.net/batch (.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. লগম্যান এটি সপ্তাহের বছর এবং দিন পেতে পারে না। এটি তুলনামূলকভাবে ধীরে ধীরে, একটি অস্থায়ী ফাইল তৈরি করে এবং লগম্যান তার লগ ফাইলগুলিতে রাখে এমন সময় স্ট্যাম্পগুলির উপর ভিত্তি করে Windows উইন্ডোজ এক্সপি এবং উপরের সমস্ত কিছুই কাজ করবে। এটি সম্ভবত আমার দ্বারা - কেউ কখনও ব্যবহার করবেন না তবে এটি আরও একটি উপায় ...

    @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

আমি জোয়ের পদ্ধতিটি সত্যিই পছন্দ করেছি তবে আমি ভেবেছিলাম আমি এটির কিছুটা প্রসারিত করব।

এই পদ্ধতির ক্ষেত্রে, আপনি কোডটি একাধিকবার চালাতে পারেন এবং পুরানো তারিখের মান "চারপাশে স্টিকিং" সম্পর্কে চিন্তা করবেন না কারণ এটি ইতিমধ্যে সংজ্ঞায়িত হয়েছে।

প্রতিবার আপনি এই ব্যাচ ফাইলটি চালানোর সময়, এটি কোনও আইএসও 8601 সামঞ্জস্যপূর্ণ সম্মিলিত তারিখ এবং সময় উপস্থাপন করবে।

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

এই সংস্করণে, আপনাকে একই কোডটি ফাইলের একাধিক জায়গায় অনুলিপি / পেস্ট না করার বিষয়ে সতর্ক থাকতে হবে কারণ এটি নকল লেবেলের কারণ হতে পারে। আপনার প্রতিটি কপির জন্য আলাদা আলাদা লেবেল থাকতে পারে বা এই কোডটিকে তার নিজস্ব ব্যাচের ফাইলে রেখে দিতে হবে এবং যেখানে প্রয়োজন সেখানে আপনার উত্স ফাইল থেকে কল করুন।


5

কেবল %date%পরিবর্তনশীলটি ব্যবহার করুন :

echo %date%

5
এটি বর্তমানে কনফিগার করা সংক্ষিপ্ত তারিখের ফর্ম্যাট যাই হোক না কেন তারিখটি ফিরিয়ে দেবে। এটি খুব কমই আইএসও -8601।
জোয়

@ জোয়ে রাজি - আমি এখানে আছি কারণ ভরসা করার পক্ষে এটি যথেষ্ট ভাল নয়।
স্টিভসিংক

5

@ প্রোভির উত্তর অনুসারে আপনার প্রয়োজনীয় বিন্যাস অনুসারে কেবল পরিবর্তন করুন

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

ফিরে আসবে

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

সম্পাদনা @Jeb মন্তব্য অনুযায়ী, যাদের সঠিক উপরে সময় ফর্ম্যাট হবে কেবল কাজই যদি আপনার তারিখ / টি কমান্ড আয়

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

আপনার স্থানীয় লোকের সাথে মানানসই সম্পাদন করা সহজ তবে প্রাসঙ্গিক% DATE% এনভায়রনমেন্ট ভেরিয়েবল দ্বারা স্ট্রিংয়ের প্রতিটি অক্ষরের সূচি ব্যবহার করে আপনি আপনার প্রয়োজনীয় স্ট্রিংয়ের অংশগুলি বের করতে পারেন।

যেমন। % DATE ~ 10,4% ব্যবহার করা DATE পরিবেশের পরিবর্তনশীলকে প্রসারিত করবে এবং তারপরে প্রসারিত ফলাফলের 11 তম (অফসেট 10) অক্ষর থেকে শুরু হওয়া কেবলমাত্র 4 টি অক্ষর ব্যবহার করবে

উদাহরণস্বরূপ যদি মার্কিন স্টাইলযুক্ত তারিখগুলি ব্যবহার করা হয় তবে নিম্নলিখিতগুলি প্রযোজ্য

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

echo %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%
2015-09-17 18:36:11

এটি কেবলমাত্র কিছু লোকের সমাধান, কারণ এটি কেবল আপনার তারিখ / সময় বিন্যাসের সেটিংস অনুযায়ী বিশ্বের কয়েকটি স্থানে কাজ করে
jeb

3

আমি এটি করে কাঙ্ক্ষিত সংখ্যার বিন্যাসে মানের জন্য পরিবেশের পরিবর্তনশীল সেট করেছি:

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

2

এটি পরীক্ষা করুন ..

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

2

যদি আপনি পাইথন ইনস্টল করেন তবে আপনি এটি করতে পারেন

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

আপনি আপনার প্রয়োজনের সাথে ফর্ম্যাট স্ট্রিংটিকে সহজেই মানিয়ে নিতে পারেন।


2
কীভাবে "পাইথন ব্যবহার করুন" প্রশ্নের প্রশ্নের উত্তর?
রস প্রেসার

3
মাকাক্যাব, রোবকোপি, ভিবিএসক্রিপ্ট, পাওয়ারশাল লগম্যান এবং অন্যান্য পরামর্শগুলি ব্যবহার করার মতোই আপনি এখানে কমান্ড লাইনে কল করতে পারেন?
কোডকিড

এটি সহজ করা যেতে পারে python -c "import datetime;print(datetime.date.today())", কারণ ক্লাসের __str__পদ্ধতিটি dateকেবল কল করে isoformat()
এক

2

লুপ ব্যবহার করে পাওয়ারশেল ব্যবহার করা এবং এর আউটপুটটিকে পরিবেশের পরিবর্তনশীলে পুনর্নির্দেশ করা সম্ভব।

কমান্ড লাইন থেকে ( cmd):

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

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

একটি ব্যাচ ফাইল আপনি অব্যাহতি পারে %aযেমন %%a:

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

1
মুখোশটি এমন হওয়া উচিত FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a তাই আক্ষরিক অক্ষরগুলি থেকে বাঁচতে মাসের জন্য উচ্চতর এমএম এবং ব্যাকস্ল্যাশ ব্যবহার করুন।
যার

1

তারিখ এবং সময় বিন্যাসের কারণে অবস্থান নির্দিষ্ট তথ্য, এগুলি% তারিখ% এবং% সময়% ভেরিয়েবলগুলি থেকে পুনরুদ্ধারে ফর্ম্যাটের বিবেচনায় রূপান্তর করে স্ট্রিংটিকে পার্স করার জন্য অতিরিক্ত প্রচেষ্টা প্রয়োজন। একটি ভাল ধারণা হ'ল ডেটা স্ট্রাকচারটি পুনরুদ্ধার করতে কিছু এপিআই ব্যবহার করা এবং আপনার ইচ্ছামত পার্স করা। ডাব্লুএমআইসি একটি ভাল পছন্দ। উদাহরণস্বরূপ নীচে Win32_LocalTime ব্যবহার করুন । এছাড়াও আপনি ব্যবহার করতে পারেন Win32_CurrentTime বা Win32_UTCTime

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

ফলাফল:
2018-04-25_10: 03: 11


1

এটি সময় এবং 0 এর সাথে অংশগুলি প্যাড করতে জোয়ের উত্তরের একটি এক্সটেনশন।

উদাহরণস্বরূপ, ফলাফলটি হবে 2019-06-01_17-25-36। আরও মনে রাখবেন যে এটি ইউটিসি সময়।

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

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

  set TimeStamp=%Year%-%Month%-%Day%_%Hour%-%Minute%-%Second%


0

আমি নিম্নলিখিত ব্যবহার করছি:

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

অথবা 'মাইলগফিলনাম' নামের একটি লগফিলের সংমিশ্রণে:

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

2
তবে আপনার উত্তরটি অন্য 16 টির চেয়ে আলাদা বা ভাল কোথায়? এবং ইতিমধ্যে যথেষ্ট ইঙ্গিত রয়েছে, যে এই সমাধানটি কেবল আপনার স্থানীয়করণের জন্যই কাজ করে
jeb

0

পাওয়ারশেলটি উপলভ্য থাকলে আপনি নীচের কোডগুলি ব্যবহার করতে পারেন:

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

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

ফলাফল এখানে:

BuildDate=200518
BuildTime=115919

-2

যদি আপনি একটি নির্ভরযোগ্য সমাধান পেতে 10 থেকে 30 মিনিটের এককালীন বিনিয়োগকে আপত্তি করেন না (এটি উইন্ডোজের অঞ্চল সেটিংসের উপর নির্ভর করে না) তবে দয়া করে পড়ুন।

আসুন আমরা আমাদের মনকে মুক্ত করি। আপনি কি ঠিক এর মতো দেখতে স্ক্রিপ্টগুলি সরল করতে চান? (ধরুন আপনি LOG_DATETIME ভেরিয়েবল সেট করতে চান)

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

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

আপনি পারেন। কেবল সি # .NET দিয়ে একটি ফরম্যাটন.উক্স.এইকি তৈরি করুন এবং এটি আপনার রাস্তায় যুক্ত করুন।

মন্তব্য:

  1. ফর্ম্যাটনিউ.এক্সই তৈরি করতে আপনি কোনও ভিজ্যুয়াল স্টুডিও সংস্করণ, যেমন ভিজ্যুয়াল স্টুডিও এক্সপ্রেস ব্যবহার করতে পারেন।
  2. ভিজ্যুয়াল স্টুডিওতে, "উইন্ডোজ ফর্ম অ্যাপ্লিকেশন" প্রকল্প নয়, "কনসোল অ্যাপ্লিকেশন" সি # প্রকল্প চয়ন করুন।
  3. সাধারণ জ্ঞান: বিল্ট ফর্ম্যাটনও.এক্স.ই চালানোর জন্য .NET ফ্রেমওয়ার্ক প্রয়োজন।
  4. সাধারণ জ্ঞান: PATH ভেরিয়েবলের সাথে ফরম্যাটনও.এক্সএই যুক্ত করার পরে আপনাকে কার্যকর করতে সিএমডি পুনরায় চালু করতে হবে। এটি পরিবেশের ভেরিয়েবলের যে কোনও পরিবর্তনের ক্ষেত্রেও প্রযোজ্য।

উপকারিতা:

  1. এটি ধীর নয় (0.2 সেকেন্ডের মধ্যে শেষ হয়)।
  2. অনেকগুলি ফর্ম্যাটগুলি https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx উদাহরণস্বরূপ ফর্ম্যাটনিউ "ডিডিডি" কেবলমাত্র সপ্তাহের দিন পেতে, ফরম্যাটনিউ "ইয়াই" কেবল পাওয়ার জন্য বছর
  3. এটি উইন্ডোজের অঞ্চল সেটিংসের উপর নির্ভর করে না, সুতরাং এর আউটপুট অনেক বেশি নির্ভরযোগ্য। অন্যদিকে,% তারিখ% বিভিন্ন কম্পিউটারের সাথে সামঞ্জস্যপূর্ণ ফর্ম্যাট দেয় না এবং এটি নির্ভরযোগ্য নয়।
  4. আপনার এতগুলি সিএমডি ভেরিয়েবল তৈরি করার দরকার নেই এবং ভেরিয়েবল নেমস্পেসকে দূষিত করতে হবে।
  5. প্রোগ্রামটি শুরু করতে এবং ফলাফল পেতে ব্যাচের স্ক্রিপ্টে 3 টি লাইন লাগবে। এটি যথেষ্ট সংক্ষিপ্ত হওয়া উচিত।

আমি ভিজ্যুয়াল স্টুডিও 2010 দিয়ে নির্মিত ফরমেটন.ওসেক্সের উত্স কোড (কোনও অজানা, সম্ভবত দূষিত প্রোগ্রাম ডাউনলোড করার ঝুঁকি এড়াতে আমি নিজে এটি তৈরি করতে পছন্দ করি)। কেবল নীচের কোডগুলি অনুলিপি করুন এবং আটকান, প্রোগ্রামটি একবার তৈরি করুন এবং তারপরে ভবিষ্যতের সমস্ত ব্যবহারের জন্য আপনার কাছে একটি নির্ভরযোগ্য তারিখ বিন্যাসক রয়েছে।

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

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

    }
}

সাধারণভাবে, জটিল লজিক্সের সাথে কাজ করার সময়, আমরা একটি খুব ছোট প্রোগ্রাম তৈরি করে এবং আউটপুটটিকে ব্যাক স্ক্রিপ্টের পরিবর্তে ফিরিয়ে আনাতে প্রোগ্রামটিকে কল করে এটি আরও সহজ করে তুলতে পারি। আমরা শিক্ষার্থী নই এবং আমরা সমস্যাগুলি সমাধানের জন্য কেবলমাত্র ব্যাচ-স্ক্রিপ্ট-বিধি অনুসরণ করতে প্রয়োজনীয় পরীক্ষা নিচ্ছি না। বাস্তব কাজের পরিবেশে, কোনও (আইনী) পদ্ধতি অনুমোদিত। আমাদের এখনও উইন্ডোজ ব্যাচের স্ক্রিপ্টের দুর্বল ক্ষমতার সাথে আটকে থাকা উচিত যেখানে অনেকগুলি সাধারণ কাজের জন্য কাজের প্রয়োজন হয়? কাজের জন্য আমাদের ভুল সরঞ্জামটি কেন ব্যবহার করা উচিত?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.