Windowsコマンドラインで現在の日付/時刻を、ファイル/フォルダー名での使用に適した形式で取得するにはどうすればよいですか?


540

更新:2016年になりましたが、特に互換性のある下位互換性の理由がない限り、これにはPowerShellを使用しdateます。特に、の使用に関する地域設定の問題が原因です。@npocmakaの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を使用しています。これを実現するために追加のユーティリティをインストールしたくありません(ただし、日付の書式を適切に設定できるものはいくつかあります)。


7
コードの自動バックアップを作成しますか?よかったね!私たちもこれを行う必要があります:)
AndreiRînea2010

24
powershellの人を使用する[datetime]::now.tostring("yyyy-MM-dd")
モニカを復活さ

SQL Serverでxp_cmdshellを使用して、作成された日付のファイルをロードすることは可能ですか?私はstackoverflowについて質問しました。リンク@ stackoverflow.com/q/32293517/3327081
kolunar

回答:


667

MMDDYYYY形式で現在の日付を取得するには、Windowsバッチファイル(.bat)を参照してください。

@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時間/ミリタリー形式の時刻を使用する場合は、2番目のFOR行を次のように置き換えることができます。

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

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

地域の日/月順とは無関係に日付が必要な場合は、ISO順であるため、「WMIC os GET LocalDateTime」をソースとして使用できます。

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


44
英国の人々のFor /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)ために、あなたは二行目に欲しいでしょう。
Rory

17
このソリューションはロケールに依存します。ロリーは、日付が2012年
Nuno Furtado

25
私のシステムでは、%TIME%は "0:01:15"や "3:15:12"などの値を返し、%% a %% bコードの回答では "001"や "315"などの先行スペースが表示されます。4桁のhhmmを取得するには、次のコードを使用しFor /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))ます。これにより、ファイル名に「0001」や「0315」などの値が返されます。
twamley

10
wmicコマンドのナイスバージョン!これまでのところ、見ただけWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:tableです。同様に、取得するには20120623-16191行で、私の地元アムステルダムのタイムゾーンで: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
私にとってそれは言う%%a was unexpected at this time.
スコットzuz22ブラックロック

109

地域に依存しない日付時刻解析

%DATE%およびdirコマンドの出力形式は地域に依存するため、堅牢でもスマートでもありません。date.exeUnxUtilsの一部)は、考えられる形式で日付と時刻の情報を提供します。を使用して、ファイルから日付/時刻情報を抽出することもできますdate.exe

例:(cmd-scriptでは%ではなく%%を使用)

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コマンドを使用する他のスクリプトが失敗する可能性があります。


4
上記の奇妙により人気のあるソリューションよりもはるかに優れていますが、Windows 8.1でプロンプトを回避するために/ tを追加する必要がありました
Rainabba

6
組み込みのWindows 8.1 date.exeはロケールに依存しているようです。私のシステムでは日付がdd / MM / yyyyで返されます。ロケールに依存しない場合は、MM / dd / yyyyまたはyyyy-MM-ddのいずれかを期待します。この答えは組み込みのdate.exeではなく、サードパーティ製のバージョンについて話しているとは思いません。
SSS

1
コマンドラインで目的の形式を指定すると、ロケールに依存しません
terrinecold

3
date.exe(UnxUtilsの一部)は、組み込みの日付コマンドと同じではないことに注意してください。したがって、/ tを追加する必要がある場合は、Windowsのdateコマンドが実行されます。date.exe + "%Y-%m-%d"のようなものが機能する場合、UnxUtilsは正しくインストールされています。:-)
just.do.it 2014

SQL Serverでxp_cmdshellを使用して、作成された日付のファイルをロードすることは可能ですか?「forfiles」コマンドを試しましたが、役に立ちませんでした。私はstackoverflowについて質問しました。リンク@ stackoverflow.com
q / 32293517/3327081

104

時間設定に依存しない他の2つの方法(両方から取得) :ローカリゼーションから独立したデータ/時間を取得する方法:)。また、どちらも曜日を取得し、いずれも管理者権限を必要としません!:

  1. メイクキャブ Windowsシステムで動作します(高速ですが、小さな一時ファイルを作成します)(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つの方法。それらはあなたにあなたにもっと柔軟性を与えます、例えばあなたは一年の週、ミリ秒の時間などを得ることができます

  3. JScript /バッチハイブリッド(として保存する必要があります.bat)。JScriptは、Windows Script Hostの一部として、NT以上のすべてのシステムで使用できます(ただし、レジストリを使用して無効にすることはまれです)。

    @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ハイブリッド(一時ファイルを使用せずにバッチファイル内に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からダウンロードします(v1v2v3(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(.NETのないWindowsマシンを見たことがないので、これはかなり移植性があると思います):

    @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以降のすべてで動作します。それはおそらく私を含めて誰も使用しないでしょうが、もう1つの方法です...

    @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のもう 1つの方法は、週と曜日も提供しますが、ミリ秒は提供しません(ミリ秒については、フォクシドライブの回答を確認してください)。

    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では、上記の#3で示したJScriptメソッドと同様のJavaScriptメソッドを呼び出すことができます。月の値を含むJavaScriptのDateオブジェクトプロパティの番号は、1〜12ではなく0〜11であることを覚えておいてください。したがって、値9は10月を意味します。

    <!-- : 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 C:\> for / f %% i in( 'powershell get-date -format "{yyyyMMdd_HHmmss}"')do set datetime = %% i C:\> echo%datetime%
Samuel

1
makecab:これはと呼ばれるファイルを作成し、ファイル内~.rptを検索するstringことでmakecab機能しMakeCAB Report: Tue Sep 02 22:15:57 2014ます。私にとって、このコマンドはローカライズされていません。ロケールに依存しません。このトリックはそれに依存しています。それが起こらないことを願いましょう、そうでなければ注意してください!
n611x007 2014

10
私は冒頭のテキスト「2つ以上...」に続いて8つのソリューションを楽しんでいます。
Adam Smith、

1
mshtaハイブリッドではありませんか?:)私があなたの答えを編集して、それを追加してもいいですか?これは難解なソリューションの最高のコレクションのようで、mshtaここに属しているようです。
rojo

1
受け入れられた解決策は、何を試してもうまくいきません。これらの解決策の複数が私のために働いた。(バッチおよびPowershell)。
ブレットウェイト

44

ローカルに独立して動作する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<-------------

エラーメッセージから標準エラーへのコードを機能させるには、%% a、%% b、%% cの変数割り当ての前後に一重引用符を追加する必要がありました。"set = 20"のようなものが実行されているループ/解析のある段階で、私のロケール(PT)がエラーを引き起こしていました。引用符は、割り当てステートメントの左側のトークン(空です)を生成します。

欠点は、乱雑なロケール変数名「yy」、「mm​​」、「dd」です。しかし、ねえ、誰が気にする!


3
これは完璧で、私が今まで見た中で最もシンプルでエレガントなアプローチです。
Doug

2
参照してくださいイェルーンの機能強化すべてのロケールは、文字列を使用しないよう必要に応じて、ddmmyyの出力にしますecho:^|date
Arjan

すべてのロケールで機能するわけではありません。(ドイツ語でdateGeben Sie das neue Datum ein: (TT-MM-JJ)JJスクリプトがYY
Stephan

35

私はこれを使用します(これも地域に依存しない(イギリス))

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

このほとんど知られていないが非常に効率的な手法については、コロンとティルデを使用したCmd.exe環境変数を参照してください。(Microsoftの信頼できる参照へのポインターは高く評価されます。)
DavidRR

これは、MicrosoftのWindows XP用バッチファイルリファレンスです。そのリファレンスには、バッチパラメータの使用が含まれます。残念ながら、「スライス」技術についての議論はありません。
DavidRR 2013

これは私にとってはうまくいきません。多分それは地域の設定と関係があるのでしょうか?10月15日(水曜日)、2014年にそれを実行している場合- 「1-We_1009 / 15 /」私はの出力を得る
ジョエルB

26

このコードの最初の4行は、Windows XP Professional以降で信頼できるYY DD MM YYYY HH Min Sec変数を提供します。

@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

完璧です。これは、PSを呼び出すとcmdテキストの外観がおかしくなるので、私にとって最良のソリューションです。
サント

25

残念ながら、これは地域の設定に影響を受けませんが、それはあなたが望むことをします。

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%

あなたがウィキペディアで見つけることができるものを驚かせます。


1
マーク - コロンとティルデCmd.exe環境変数が見つかりました。これは、回答に示されている変数の「スライス」手法を説明しています。ウィキペディアの記事でその情報を見つけられなくなった。マイクロソフトからの信頼できる参照を見つけたいと思います。
DavidRR 2013

1
これは、MicrosoftのWindows XP用バッチファイルリファレンスです。そのリファレンスには、バッチパラメータの使用が含まれます。残念ながら、「スライス」技術についての議論はありません。
DavidRR 2013

18

コマンドラインで現在の日付を取得するには、次のスクリプトを使用してください:

echo %Date:~0,3%day

8
これで少し遊んだ、それは私が日付と時刻を取得するために見つけた最短のものです:echo%date
%%

15

別の方法(クレジット):

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

ここでの私の回答はどちらも、地域の設定によって決定される日と月の順序に依拠していることに注意してください。これを回避する方法はわかりません。


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-examplesいくつかの良い点があります将来的にいくつかのために役立つかもしれません。
サラバナン、2011

13

これは本当に簡潔ではありませんが、より柔軟な方法かもしれません(クレジット):

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

日付時刻を1行で取得する方法は次のとおりです。

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%出力も異なりますが、トークンの順序を変更できます。

別の形式が必要な場合は、トークンを再配置するか、別の(またはなしの)区切り記号を使用して、エコーステートメントを変更します。


12時間形式で時刻を取得し、AMまたはPM情報を表示する方法はありますか?
Sangli


9

簡潔な答え :

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

:: cmd内の/ f%i in( 'PowerShell -Command "get-date" -format "yyyyMMdd"')do set yyyyMMdd =%i :: in cmd script for / f %% i in( 'PowerShell -Command "get-date" -format "yyyyMMdd" ')do set yyyyMMdd = %% i
Yordan Georgiev

8

ワンライナーの日付と時刻を取得するマシュージョンソンのワンライナーソリューション雄弁で便利です。

ただし、バッチファイル内から作業するには、簡単な変更が必要です。

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のCMD(現時点では%% aは予期されていなかった)またはPowerShell(キーワードの後に​​ '('の開始がありません)で機能しません
rainabba

3
Rainabba、それはまさにそのコマンドがCMD行から発行されたときに発生するエラーです。ただし、「バッチファイル内から」の場合、コマンドは「2014-01-30 1324」を返します。
John Langstaff 2014年

1
または、はるかに簡単なのはforループがない場合ですecho %date:/=-%%time::=-%
Gerhard Barnard

7

そして、これは時間部分の同様のバッチファイルです。

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


こんにちは、以下のコマンドを使用して、更新日に従ってファイルを読み込むことができましたがz: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path” 、作成日に従ってファイルを読み込む方法を知りたいです。任意の助けをいただければ幸いです。Stackoverflowについて質問されましたが、まだ回答がありません。詳細については、リンクをご覧くださいstackoverflow.com/q/32293517/3327081
kolunar

1
それについて新しい質問をしてください。使ったことがないforfiles
Jeroen Wiert Pluimers

7

オランダ語でも動作するように、vMaxのバッチファイルで回答を変更しまし。 オランダ語-私たちと同じように-にいくつかの変更があります、
%date%date/tと、dateそのブレークオリジナルのバッチ・ファイルを。

他のWindowsロケールに対してもこれをチェックして、結果を報告できる人がいるとよいでしょう。
バッチファイルがあなたの場所で失敗した場合、コマンドプロンプトにこれらの2つのステートメントの出力を含めてください:
echo:^|date
date/t

これは、バッチファイルから取得する必要がある出力のサンプルです。

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

以下は、理由に関するコメント付きの改訂されたコードです。

:: /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
一部のユーザーは、最初に年を使用するか、または先行ゼロを欠いています。国別のウィキペディアの日付形式を参照してください。フランス人jj-mm-aaaa、jour、mois、anneeに使用する可能性がありますか?イタリア人は多分gg/mm/aaaaジョルノ、メス、アンノ?tt.mm.jjjjタグ、モナ、ヤーのドイツ人?しかし、その後:ほとんどの国では、ごく少数の言語しか使用されていません。オランダのように、確かにWindowsは英語またはオランダ語であることが多く、それ以外はほとんどありません。私には十分です。
Arjan

2
余談ですが、Windowsバッチファイルの非表示機能の別のバージョンは完全jjではありません(オランダ語の修正が必要で、4桁の年は適用されません)が、またはのshiftような日を破棄するために使用されます。ただ違う。Monma
Arjan

4
それはドイツのシステムで壊れます。年と月は機能しますが、「日」は「d」ではなくドイツ語の「T」(「タグ」)で始まるため、日は失敗します。プロンプトのフォーマット文字列は(TT-MM-JJ)date/t出力は23.06.2012です。/ cc @Arjan
balpha

2
別の方法として、を使用してレジストリから注文取得することもできますreg query "HKCU\Control Panel\International" /vShortDate。テスト中は注意してください。開いているコマンドプロンプトの場合、コントロールパネルの設定を変更すると、日付の表示に使用される形式も変更されます(dateおよびdate /tおよびの両方echo %date%)が、Windows 7では新しい日付の形式は変更されません。私の短い日付形式をに変更するようにYY/MM/dd、私を取得します:The current date is: 12/06/23 Enter the new date: (mm-dd-yy)。新しいコマンドプロンプトを開くと修正されます。
アルジャン

2
@Arjanこれは正しいはずですreg query "HKCU\Control Panel\International" /v sShortDate
トリカス

6

これは私が使用したものです:

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


私のシステムでは、%date%に「Tue 10/14/2008」が含まれています。したがって、「火」とスペース文字を切り取る(または処理する)必要があります。
BoltBait 2008年

こんにちは@micahwittman。SQL Serverでxp_cmdshellを使用して、作成された日付のファイルをロードすることは可能ですか?「forfiles」コマンドを試しましたが、役に立ちませんでした。私はstackoverflowについて質問しました。リンク@ stackoverflow.com
q / 32293517/3327081

5

同様の問題がありました。暗号化されたファイルをFTPサーバーから毎日自動的にダウンロードします。gpgを使用してファイルを復号化し、ファイルの名前を現在の日付(YYYYMMDD形式)に変更し、復号化したファイルを正しい部門のフォルダーにドロップします。

私は日付に従ってファイルの名前を変更するためのいくつかの提案を検討しましたが、この簡単な解決策に出くわすまで運がありませんでした。

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

完全に機能しました(つまり、ファイル名は「2011-06-14.txt」として表示されます)。

(ソース)


5

以下に基づく関数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

関数パラメーターはout-Parametersであることに注意してください。つまり、値ではなく変数名を指定する必要があります。

すべてのパラメーターはオプションであるためcall:Now Y M、年と月のみを取得する場合は有効な呼び出しです。


4

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

ZIPファイル内で「Date.exe」という名前を探し、名前を「DateFormat.exe」に変更します(競合を回避するため)。

Windows system32フォルダーに配置します。

多くの「日付出力」オプションがあります。

ヘルプについては、 DateFormat.exe --h

出力を環境変数にどのように入れるかわかりません... SETを使用します。


1
ありがとうございます。この質問は、追加のツールをダウンロードせずに行うためのものです。
Rory

3

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:

それでも最適化できるもの:変更中に短期間で日付形式を使用すると、他のプロセスが混乱する可能性があります。そのため、既存のフォーマット文字列に従って出力を解析すると「安全」になる可能性がありますが、より複雑になります


あなたはクエリiDate(technet.microsoft.com/en-us/library/cc978637.aspx)を登録して条件付きで続行することができます(technetによると3つの可能な値)-私はまだこれを試していませんが。
Vincent De Smet、2012

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

機能的な形式で参照するために、既知の場所を指定します。この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に保存されます。出力は次のとおりです。

ここに画像の説明を入力してください


これは地域の問題に伴うようです-これはすべての英語のマシンで動作するわけではありません。

@SteveFest、驚くことではありません。一時的にロケールを設定することができた場合、それはグローバルな解決策を提供するのに役立つかもしれませんが、事前に地域を知る必要があるようです。あなたのロケールはen-USまたはen-SomewhereElseですか?
bvj 2017

@SteveFest検証するサンプルを含む日付/時刻式がそれぞれに含まれているロケールのリストを構築できると思います。私はとても忙しいですが、説明のために私の答えを更新してみます。HK時刻/日付出力のサンプルを見せていただけますか?zh-HKが固定オフセットで数字を出力することをばかげて仮定しているかもしれません。
bvj 2017

zh-HK:(yy)yy年m月d日 hh:mm-先行ゼロなし。(yy)は2桁の年、または4桁の年であるため、無視できます。ただし、1つ注意してください。日付時刻の形式はマシンごとに変更できます。

@SteveFestに感謝します。数週間以内にフォローアップします。systeminfoCLIで実行し、何が表示されるかを教えてくださいSystem Locale。プログラムの実行には時間がかかりますが、ロケールの結果がキャッシュされ、その後、タイムスタンプ形式の索引付けに使用される可能性があります。
bvj 2017

0

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%

そしてまた。それがあなたのマシンで動作するのは素晴らしいことですが、あなたは要点を逃しましたindependent of the regional settings of the machine
jeb

-1

o / pは地域に依存しないソリューションを要求しなかったことに注意します。私の解決策はイギリスのためのものです。

これは、バッチファイルで使用するための最も単純な1行のソリューションです。

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

2
彼は地域に依存しない解決策に言及しました...particularly because of the regional settings issue with using date。ところで あなたの解決策は他の20の答えと同じです。
ジェブ

ええ、でも実は(オプションで)コマンドラインで使うことができました。1行のコードで同じソリューションが提供される場合、35行のコードを投稿するメリットは何ですか?
Ed999


この答えは正しくありませんが、実際のanswrについてコメントするために、単純に実行できた場合はforループは必要ありませんecho %date:/=-%
Gerhard Barnard

いいえ。FORループを省略した場合、変数を作成できず、抽出に苦労した日付はまだ役に立ちません。FORループを使用すると、ループによって作成された変数をスクリプトの他の部分で使用できます。1行しか必要ない場合は、FORループを作成するために数十行のコードを使用することを強くお勧めしません。また、非コマンドラインソリューションの投稿は非推奨になりました。この場合、o / pは、コマンドラインで使用する1行のソリューションを具体的に要求しました。
Ed999、19年

-3

私はすでに言及された多くの方法があることを知っています。しかし、それがどのように行われるかを理解するためにそれを分解する私の方法はここにあります。うまくいけば、それは段階的な方法が好きな人のために役立ちます。

:: 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
jeb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.