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
코드에 대한 자동 백업을 작성 하시겠습니까? 잘 됐네요! 우리도 이것을해야한다 :)
Andrei Rînea

24
powershell 사람들을 사용 ...[datetime]::now.tostring("yyyy-MM-dd")
Nacht-복원 모니카

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 시간 / 군사 형식의 시간을 선호하는 경우 두 번째 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
-이 솔루션은 날짜가 22-02-2012으로 오는 곳, 로리는 delims = / delims로 = 교체해야하는 다른 로케일에 대한 영국의 예를 준 의존 로케일
누누 퍼 타도

25
내 시스템에서 % TIME %은 "0:01:15"및 "3:15:12"와 같은 값을 반환하며 응답의 %% a %% b 코드는 "001"및 "315"와 같은 선행 공간을 제공합니다. 네 자리 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-1619현지 암스테르담 시간대 에 들어가려면 한 줄로 :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.
Scott zuz22 Blacklock

109

지역적으로 독립된 날짜 시간 구문 분석

명령 의 출력 형식 %DATE%dir명령은 지역에 따라 다르므로 강력하거나 똑똑하지 않습니다. date.exe ( UnxUtils의 일부)는 생각할 수있는 형식으로 날짜 및 시간 정보를 제공합니다. 로 파일에서 날짜 / 시간 정보를 추출 할 수도 있습니다 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
훨씬 더 나은 위의 이상한 더 인기있는 솔루션보다하지만 난 8.1 Windows에서 프롬프트를 피하기 위해 / 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

SQL Server에서 xp_cmdshell을 사용하여 만든 날짜의 파일을로드 할 수 있습니까? "forfiles"명령을 시도했지만 아무 소용이 없습니다. stackoverflow에 대한 질문을
하셨습니다.

103

시간 설정에 의존하지 않는 두 가지 방법 (둘 다 : 현지화와 독립적으로 데이터 / 시간을 얻는 방법 :) . 그리고 둘 다 요일을 가지며 관리자 권한이 필요하지 않습니다! :

  1. MAKECAB- 모든 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. JScript / 배치 하이브리드 (로 저장해야 함 .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 하이브리드 JScript와 동일한 경우 ( 일시 파일을 사용하지 않고 배치 파일 내에 VBScript를 포함하고 실행할 수 있습니까? ) 하이브리드 화가 그다지 완벽하지는 않습니다.

    :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 -Microsoft에서 .NET을 다운로드 한 모든 시스템 ( 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 (.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 이상에서 모든 작업을 수행합니다. 아마 나를 포함하여 다른 사람이 사용하지는 않지만 한 가지 더 방법입니다 ...

    @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를 사용하면 위의 # 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 : \> ( 'powershell get-date -format "{yyyyMMdd_HHmmss}' ')에서 / f %% i의 경우 datetime = %% i C : \> echo % datetime %
Samuel

1
makecab:이라는 파일을 생성하여 작동 ~.rpt하고, 검색 string을 시작으로 그 안에 makecab같은 라인 인 MakeCAB Report: Tue Sep 02 22:15:57 2014. 나를 위해이 명령은 현지화되어 있지 않으며 로케일 독립적입니다. 이 트릭은 그것에 의존하고 있습니다. 그것이 아니거나 조심하지 않기를 바랍니다!
n611x007

10
"Two more ..."라는 시작 텍스트와 8 가지 솔루션이 있습니다.
Adam Smith

1
무엇을, 아니 mshta하이브리드? :) 답변을 수정하고 추가해도 될까요? 이것은 난해한 솔루션 중 최고의 컬렉션으로 보이며 mshta여기에 속하는 것처럼 보입니다 .
rojo

1
내가 시도한 것에 상관없이 수용 된 솔루션이 작동하지 않습니다. 이러한 솔루션 중 다수가 저에게 효과적이었습니다. (배치 및 Powershell).
Brett Wait

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

코드가 stderr에 sans error msg를 작동 시키려면 %% a, %% b 및 %% c에 대한 변수 할당을 작은 따옴표로 추가해야했습니다. "set = 20"과 같은 항목이 실행되는 루핑 / 구문 분석에서 한 단계에서 내 로케일 (PT)이 오류를 일으켰습니다. 따옴표는 할당 문의 왼쪽에 대해 토큰을 생성합니다 (비어 있음).

단점은 지저분한 로케일 변수 이름 : 'yy', 'mm'및 'dd'입니다. 그러나, 누가 걱정하는지!


3
이것은 완벽하고 내가 지금까지 본 가장 단순하고 가장 우아한 접근법입니다.
Doug

2
참조 제론의 향상 모든 로케일이 문자열을 사용하지으로 필요 dd, mm그리고 yy의 출력을 echo:^|date.
Arjan

모든 로케일에서 작동하지는 않습니다. (에서 독일어 date제공 Geben Sie das neue Datum ein: (TT-MM-JJ)(가) 어디, JJ스크립트 (예상하는 나누기 YY))
스테판

35

나는 이것을 사용한다 (다시 독립 지역 (영국)이 아님)

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

이 알려지지 않았지만 매우 효율적인 기술에 대한 콜론 및 틸드가있는 Cmd.exe 환경 변수를 참조하십시오 . (Microsoft의 권위있는 참조에 대한
조언을 부탁

다음 은 Windows XP 용 Microsoft의 배치 파일 참조입니다 . 해당 참조에는 배치 매개 변수 사용이 포함됩니다 . 불행히도, '슬라이스'기법에 대한 논의는 없습니다.
DavidRR

이것은 나에게 효과적이지 않습니다. 지역 설정과 관련이 있습니까? 2014 년 10 월 15 일 수요일에 실행할 때 "/ 15 /-1-We_1009"의 출력을 얻습니다.
Joel B

26

이 코드의 처음 네 줄은 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 텍스트가 재미있게 보일 것입니다.
Ste

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%

Wikipedia에서 찾을 수있는 놀라운 것들 .


1
마크 - 찾을 수 콜론 및 물결표 Cmd.exe를 환경 변수 답변에 전시 된 변수 '슬라이스'기술을 설명합니다. 더 이상 Wikipedia 기사에서 해당 정보를 찾지 못했습니다. Microsoft에서 신뢰할 수있는 참조를 찾고 싶습니다.
DavidRR

1
다음 은 Windows XP 용 Microsoft의 배치 파일 참조입니다 . 해당 참조에는 배치 매개 변수 사용이 포함됩니다 . 불행히도, '슬라이스'기법에 대한 논의는 없습니다.
DavidRR

18

다음 스크립트를 사용하여 현재 날짜를 명령 행에서 가져 오십시오.

echo %Date:~0,3%day

8
이것으로 조금
놀아서

15

다른 방법 ( credit ) :

@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앞으로 좋은 점이 있으면 도움이 될 것입니다.
사라 바난

13

이것은 실제로 더 짧지는 않지만 더 유연한 방법 일 수 있습니다 ( credit ) :

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

한 줄로 날짜 시간을 얻는 방법은 다음과 같습니다.

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 % 출력이 달라 지지만 토큰 순서를 수정할 수 있습니다.

다른 형식을 원하면 토큰을 다시 정렬하거나 다른 (또는없는) 구분 기호를 사용하여 echo 문을 수정하십시오.


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

:: ( 'PowerShell -Command "get-date"-format "yyyyMMdd"')에서 / f % i의 cmd에서 ( 'PowerShell -Command의 / f %% i에 대한 cmd 스크립트에서 yyyyMMdd = % i :: "get-date"-format "yyyyMMdd" ') yyyyMMdd = %% i를 설정 함
Yordan Georgiev

8

한 줄짜리 날짜와 시간을 얻는 Matthew Johnson의 한 줄짜리 솔루션 훌륭하고 유용합니다.

그러나 배치 파일 내에서 작업하려면 간단한 수정이 필요합니다.

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

1
또는 훨씬 간단 루프에 대한없이 것echo %date:/=-%%time::=-%
게르하르트 버나드

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

-제로 엔


안녕하세요, 아래 명령을 사용하여 수정 날짜에 따라 파일을로드 할 수 있었지만 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/tdate

일부 사람들이 다른 Windows 로캘과 비교하여이를 확인하고 결과를 다시보고 할 수 있다면 좋을 것입니다.
배치 파일이 해당 위치에서 실패하면 명령 프롬프트에 다음 두 명령문의 출력을 포함하십시오.
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

-제로 엔


2
일부는 몇 년을 먼저 사용하거나 선행 제로가 부족합니다. 국가 별 Wikipedia의 날짜 형식을 참조하십시오 . 프랑스 힘의 사용 jj-mm-aaaa르, mois, annee 하시나요? 이탈리아 사람들 gg/mm/aaaa은 giorno, mese, anno? tt.mm.jjjjTag, Monat, Jahr를위한 독일인 ? 그러나 대부분의 국가에서는 소수의 언어 만 사용됩니다. 네덜란드와 마찬가지로 실제로 Windows는 영어 또는 네덜란드어가 될 것입니다. 나를 위해 충분합니다.
Arjan

2
제쳐두고 : Windows 배치 파일의 숨겨진 기능에 있는 다른 버전 은 덜 완벽하지만 (네덜란드의 수정이 필요하고 jj4 자리 연도를 시행하지는 않습니다), 또는 shift같은 날을 버리는 데 사용 됩니다 . 달라요 Monma
Arjan

4
독일 시스템에서 고장납니다. 년과 월은 작동하지만 "일"은 "d"가 아닌 독일어 "Tag"로 시작하기 때문에 실패합니다. 프롬프트의 형식 문자열은 (TT-MM-JJ)이며 date/t출력은 23.06.2012입니다. / cc @Arjan
balpha

2
또 다른 측면 : 하나는 또한 주문을 얻을 수 사용하여 레지스트리reg query "HKCU\Control Panel\International" /vShortDate . 테스트하는 동안주의하십시오 : 열린 명령 프롬프트의 경우 제어판 설정을 변경하면 날짜를 표시하는 데 사용되는 형식 ( datedate /t및 모두 echo %date%) 도 변경 되지만 Windows 7에서는 새 날짜의 형식이 변경되지 않습니다! 짧은 날짜 형식을으로 변경하는 것처럼 YY/MM/dd나를 얻을 수 The current date is: 12/06/23 Enter the new date: (mm-dd-yy)있습니다. 새로운 명령 프롬프트를 열면 문제가 해결됩니다.
Arjan

2
@Arjan이 있어야합니다 reg query "HKCU\Control Panel\International" /v sShortDate.
tricasse

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

안녕하세요 @micahwittman. SQL Server에서 xp_cmdshell을 사용하여 만든 날짜의 파일을로드 할 수 있습니까? "forfiles"명령을 시도했지만 아무 소용이 없습니다. stackoverflow에 대한 질문을
하셨습니다.

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:

여전히 최적화 할 수있는 것 : 다른 프로세스가 수정되는 동안 짧은 형식으로 날짜 형식을 사용하면 다른 프로세스가 혼란 스러울 수 있습니다. 따라서 기존 형식 문자열에 따라 출력을 구문 분석하는 것은 'safer'일 수 있지만 더 복잡합니다.


iDate 쿼리 ( technet.microsoft.com/en-us/library/cc978637.aspx )를 등록 하고 조건부로 진행할 수 있습니다 (technet 에 따라 3 가지 가능한 값)-아직 시도하지는 않았지만.
Vincent De Smet

2
:: GetDate.cmd -> Uses WMIC.exe to get current date and time in ISO 8601 format
:: - Sets environment variables %_isotime% and %_now% to current time
:: - On failure, clears these environment variables
:: Inspired on -> https://ss64.com/nt/syntax-getdate.html
:: - (cX) 2017 adolfo.dimare@gmail.com
:: - http://stackoverflow.com/questions/203090
@echo off

set _isotime=
set _now=

:: Check that WMIC.exe is available
WMIC.exe Alias /? >NUL 2>&1 || goto _WMIC_MISSING_

if not (%1)==() goto _help
SetLocal EnableDelayedExpansion

:: Use WMIC.exe to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC.exe Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    IF "%%~L"=="" goto  _WMIC_done_
        set _yyyy=%%L
        set _mm=00%%J
        set _dd=00%%G
        set _hour=00%%H
        set _minute=00%%I
        set _second=00%%K
)
:_WMIC_done_

::   1    2     3       4      5      6
:: %%G  %%H    %%I     %%J    %%K    %%L
:: Day  Hour  Minute  Month  Second  Year
:: 27   9     35      4      38      2017

:: Remove excess leading zeroes
        set _mm=%_mm:~-2%
        set _dd=%_dd:~-2%
        set _hour=%_hour:~-2%
        set _minute=%_minute:~-2%
        set _second=%_second:~-2%
:: Syntax -> %variable:~num_chars_to_skip,num_chars_to_keep%

:: Set date/time in ISO 8601 format:
        Set _isotime=%_yyyy%-%_mm%-%_dd%T%_hour%:%_minute%:%_second%
:: -> http://google.com/search?num=100&q=ISO+8601+format

if 1%_hour% LSS 112 set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%am
if 1%_hour% LSS 112 goto _skip_12_
    set /a _hour=1%_hour%-12
    set _hour=%_hour:~-2%
    set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%pm
    :: -> https://ss64.com/nt/if.html
    :: -> http://google.com/search?num=100&q=SetLocal+EndLocal+Windows
    :: 'if () else ()' will NOT set %_now% correctly !?
:_skip_12_

EndLocal & set _isotime=%_isotime% & set _now=%_now%
goto _out

:_WMIC_MISSING_
echo.
echo WMIC.exe command not available
echo - WMIC.exe needs Administrator privileges to run in Windows
echo - Usually the path to WMIC.exe is "%windir%\System32\wbem\WMIC.exe"

:_help
echo.
echo GetDate.cmd: Uses WMIC.exe to get current date and time in ISO 8601 format
echo.
echo    %%_now%%     environment variable set to current date and time
echo    %%_isotime%% environment variable to current time in ISO format
echo    set _today=%%_isotime:~0,10%%
echo.

:_out
:: EOF: GetDate.cmd

0

기능적 형태로 참조 할 수있는 알려진 지역이 있습니다. 이 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

@SteveFest 필자는 유효성을 검사 할 샘플이있는 날짜 / 시간 표현식이 포함 된 로캘 목록을 작성할 수 있다고 생각합니다. 나는 매우 바쁘지만 설명을 위해 답변을 업데이트하려고 노력할 것입니다. 홍콩 시간 / 날짜 출력의 샘플을 보여 주시겠습니까? zh-HK가 고정 오프셋에서 숫자를 인쇄한다고 가정하면 어리석은 것일 수 있습니다.
bvj

zh-HK : (yy)yy年m月d日 hh:mm-선행 0이 없습니다. (yy)는 2 자리 연도 또는 4 자리 연도이므로 무시할 수 있습니다. 그러나 한 가지 유의하십시오. 날짜 시간 형식은 컴퓨터마다 변경 될 수 있습니다.

@SteveFest에게 감사드립니다. 몇 주 안에 연락 드리겠습니다. systeminfoCLI에서 실행 하여 원하는 내용을 알려주십시오 System Locale. 프로그램을 실행하는 데 시간이 걸리지 만 로케일 결과가 캐시되어 이후 시간 소인 형식을 색인화하는 데 사용될 수 있습니다.
bvj

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. Btw. 귀하의 솔루션은 다른 20 가지 답변과 동일합니다.
jeb

예, 그러나 실제로는 선택적으로 명령 행에서 사용할 수 있습니다. 한 줄의 코드가 동일한 솔루션을 제공한다면 35 줄의 코드를 게시 할 때의 장점은 무엇입니까?
Ed999


이 답변이 정확하지는 않지만 실제 answr에 대해 언급하기 위해 간단히 수행 할 수 있었을 때 for 루프가 필요하지 않습니다.echo %date:/=-%
Gerhard Barnard

FOR 루프를 생략하면 변수를 만들 수 없으며 추출하는 데 문제가 발생한 날짜는 여전히 쓸모가 없습니다. FOR 루프를 사용하면 루프에서 생성 된 변수를 스크립트의 다른 부분에서 사용할 수 있습니다. 한 줄만 필요한 경우 수십 줄의 코드를 사용하여 FOR 루프를 만드는 것이 더 이상 사용되지 않습니다. 그리고 나는 비 명령 줄 솔루션을 게시하는 것을 강력히 거부합니다. o / p는 명령 줄에서 사용할 한 줄 솔루션을 구체적으로 요청했습니다.
Ed999

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