Windows 명령줄에서 파일/폴더 이름으로 사용하기에 적합한 형식으로 현재 날짜/시간을 가져오려면 어떻게 해야 합니까?
하는 데 특히 문제로 date
@npocmaka의 https://stackoverflow.com/a/19799236/8479 를 참조하십시오.
파일 이름으로 입력할 수 있는 형식으로 현재 날짜를 가져오는 데 사용할 수 있는 Windows 명령줄 문은 무엇입니까?
를 현재 하는 . 예를 들어, 예를들현날어재사디여하용압다로아파원니.bat합을일축는하브카이를리토일렉부로짜의름이와시간을▁ibat▁into▁that▁withbat▁for다▁file▁directory▁archive▁z▁.▁a▁an▁to▁have▁want니,▁example,▁as▁a합▁the원파을▁up▁name▁and▁dateips▁current일예▁of▁part▁the▁time를▁..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을 사용하고 있습니다.이를 위해 추가 유틸리티를 설치하고 싶지 않습니다(날짜 포맷을 잘 할 수 있는 유틸리티가 있다는 것은 알고 있지만).
MMDDYYY 형식으로 현재 날짜를 가져오려면 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.방망이
2008-10-14_0642
날짜를 지역의 요일/월 순서와 독립적으로 원하는 경우 ISO 순서이므로 "WMICos 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]입니다.
시간 설정에 의존하지 않는 두 가지 방법(둘 다 다음에서 선택):현지화와 무관하게 데이터/시간을 얻는 방법:).또한 둘 다 요일을 지정할 수 있으며 관리자 권한이 필요하지 않습니다!:
MAKECAB - 모든 Windows 시스템에서 작동합니다(빠르지만 작은 임시 파일을 만듭니다)(폭시 드라이브 스크립트):
@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
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 스크립트 언어를 사용하는 세 가지 방법이 더 있습니다.이를 통해 연중 주간, 시간(밀리초 단위) 등의 유연성을 확보할 수 있습니다.
JScript/Batch 하이브리드(다른 이름으로 저장해야 함)
.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());
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),", ","-")
PowerShell - Microsoft에서 .NET을 다운로드한 모든 컴퓨터에 설치할 수 있습니다(v1, v2, v3(윈도우즈 7 이상만 해당).윈도우즈 7/윈도우즈 서버 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=%%#
자체 컴파일된 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"));
로그맨 이것은 주의 연도와 요일을 가져올 수 없습니다.비교적 느리고 임시 파일을 만들기도 하며 로그맨이 로그 파일에 기록하는 타임스탬프를 기반으로 합니다.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
WMIC를 사용하여 밀리초가 아닌 연도의 주와 요일을 제공하는 또 다른 방법(밀리초 동안 폭스 드라이브의 응답 확인):
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%
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
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>
지역적으로 독립된 날짜 시간 구문 분석
의 입니다.%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
지휘권
여기 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'.하지만, 누가 신경써요!
나는 이것을 사용합니다(다시 말해 지역 독립(영국)이 아님).
set bklog=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%%time:~3,2%
이 코드의 처음 네 줄은 Windows XP Professional 이상에서 신뢰할 수 있는 YYDD MM YYYY HH MinSec 변수를 제공합니다.
@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
유감스럽게도 이것은 지역 환경에 영향을 받지 않지만, 당신이 원하는 것을 해줍니다.
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%
위키피디아에서 찾을 수 있는 것들은 놀랍습니다.
명령줄에서 현재 날짜를 가져오려면 다음 스크립트를 사용하십시오.
echo %Date:~0,3%day
"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.zip
다른 방법(크레딧):
@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%
여기서 제 두 답변은 여전히 지역 설정에 따라 날짜와 월의 순서에 따라 결정됩니다. 이를 해결하는 방법을 잘 모르겠습니다.
이것은 사실 더 간단하지는 않지만 더 유연한 방법일 수 있습니다(신용).
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%
단답:
:: 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
다음은 한 줄로 날짜 시간을 가져오는 방법입니다.
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %a in ('%date% %time%') do echo %c-%a-%b %d%e
미국에서는 "yyyy-mm-ddhmm"가 출력됩니다.국가별 설정에 따라 %date% 출력이 달라지지만 토큰 순서를 수정할 수 있습니다.
다른 형식을 사용하려면 토큰을 재정렬하거나 다른(또는 없음) 구분 기호를 사용하여 에코 문을 수정합니다.
다음 행을 사용합니다.
PowerShell -Command "get-date"
한 줄의 날짜와 시간을 얻기 위한 매튜 존슨의 한 줄 솔루션은 설득력 있고 유용합니다.
그러나 배치 파일 내에서 작업하려면 간단한 수정이 필요합니다.
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
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 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
--조린
그리고 여기 시간 부분에 대한 유사한 배치 파일이 있습니다.
:: 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
--조린
제가 사용한 것은 다음과 같습니다.
::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/
에 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
년과 월만 받고 싶은 경우 유효한 통화입니다.
저도 비슷한 문제가 있었습니다.FTP 서버에서 암호화된 파일을 매일 자동으로 다운로드합니다.gpg를 사용하여 파일을 해독하고 파일 이름을 현재 날짜(YYYMMDD 형식)로 변경한 후 암호 해독된 파일을 올바른 부서의 폴더에 넣고 싶었습니다.
날짜에 따라 파일 이름을 변경하는 제안을 여러 번 검토했지만 이 간단한 해결책을 우연히 발견하기 전까지는 운이 없었습니다.
for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "decrypted.txt" %%g-%%e-%%f.txt
완벽하게 작동했습니다(즉, 파일 이름이 "2011-06-14.txt"로 나옵니다).
http://sourceforge.net/projects/unxutils/files/
충돌을 방지하기 위해 ZIP 파일 내부에서 "Date.exe"라는 이름을 찾고 이름을 "DateFormat.exe"로 변경합니다.
Windows system32 폴더에 저장합니다.
많은 "날짜 출력" 옵션이 있습니다.
도움말, 사용DateFormat.exe --h
환경 변수에 출력을 어떻게 적용할지 잘 모르겠습니다.SET를 사용합니다.
결합하다Powershell
배치 파일로 변환하고 메타 변수를 사용하여 각각을 할당합니다.
@echo off
for /f "tokens=1-6 delims=-" %%a in ('PowerShell -Command "& {Get-Date -format "yyyy-MM-dd-HH-mm-ss"}"') do (
echo year: %%a
echo month: %%b
echo day: %%c
echo hour: %%d
echo minute: %%e
echo second: %%f
)
월 이름을 원하는 경우 형식을 변경할 수도 있습니다.MMM
또는MMMM
~ 형식 및 12시간 ~ 24시간hh
또는HH
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:
최적화할 수 있는 기능:날짜 형식을 수정하는 동안 단기간에 사용하면 다른 프로세스가 혼동될 수 있습니다.따라서 기존 형식 문자열에 따라 출력을 구문 분석하는 것이 '안전'할 수 있지만 더 복잡해질 것입니다.
:: 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
저는 용한사를 요.
date.exe
이름을 로 변경했습니다.date_unxutils.exe
충돌을 방지하기 위해.요 안에 .
bin
배치 스크립트 옆에 있는 폴더입니다.
코드
:: Add binaries to temp path
IF EXIST bin SET PATH=%PATH%;bin
:: Create UTC Timestamp string in a custom format
:: Example: 20210128172058
set timestamp_command='date_unxutils.exe -u +"%%Y%%m%%d%%H%%M%%S"'
FOR /F %%i IN (%timestamp_command%) DO set timestamp=%%i
echo %timestamp%
UnxUtils 다운로드
- 링크.
레퍼런스
- 제가 만든 멋진 대답입니다.
PowerShell 아래의 코드를 사용해 보십시오.24시간 후에 ddmmyhhmm로 날짜가 지정된 파일 또는 폴더 변수가 생성됩니다.
[int] $day = Get-Date -UFormat %d
[int] $month = Get-Date -UFormat %m
[int] $year = Get-Date -UFormat %y
[String] $date = "$($day)$($month)$($year)"
$time = Get-Date -UFormat %R
$time -replace ‘[:]’,”"
$fileFolderName = $date + time
기능적 형태로 참조할 수 있도록 알려진 위치가 주어집니다. 그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 파일에 저장된 출력은 다음과 같습니다.
이 코드는 Windows 7(윈도우 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%
저는 이미 언급된 방법이 많다는 것을 알고 있습니다.하지만 여기 그것이 어떻게 이루어지는지 이해하기 위해 그것을 분해하는 방법이 있습니다.단계별 방법을 좋아하는 사람에게 도움이 되기를 바랍니다.
:: 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
저는 o/p가 지역 독립적인 해결책을 요구하지 않았다는 점에 주목합니다.하지만 나의 해결책은 영국을 위한 것입니다.
이것은 배치 파일에 사용할 수 있는 가장 간단한 솔루션인 1줄 솔루션입니다.
FOR /F "tokens=1-3 delims=/" %%A IN ("%date%") DO (SET today=%%C-%%B-%%A)
echo %today%
이 솔루션은 원하는 날짜 형식(예: YY-MM-DD 또는 DD-MM-YY)을 제공하도록 출력 문에서 변수 %%A %%B 및 %%C의 순서를 변경하여 변경할 수 있습니다.
이 답변을 게시하는 제 의도는 코드 한 줄을 사용하여 이를 달성함으로써 명령줄에서 이 작업이 수행될 수 있음을 보여주는 것입니다.
그리고 다른 사람들이 했던 것처럼 35줄의 코드에 대한 답변을 게시하는 것은 중복됩니다. 왜냐하면 o/p가 질문에 명령줄 솔루션을 구체적으로 요청했기 때문입니다.따라서 O/P는 특히 단일 라인 솔루션을 모색했습니다.
언급URL : https://stackoverflow.com/questions/203090/how-do-i-get-current-date-time-on-the-windows-command-line-in-a-suitable-format
'programing' 카테고리의 다른 글
PostgreSQL로 데이터베이스 간 쿼리를 수행할 수 있습니까? (0) | 2023.06.03 |
---|---|
.NET 5 WPF 프로그램에서 경고 NETSDK1137을 제거하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
호출 방법의 이름을 가져오는 방법은 무엇입니까? (0) | 2023.06.03 |
정의된 확대/축소 수준에서 모든 Excel 시트 설정 (0) | 2023.06.03 |
CSMutableArray에 CGRect 값을 저장하는 방법은 무엇입니까? (0) | 2023.06.03 |