Windows 명령 행 : 이름에 현재 날짜가있는 파일을 작성하십시오.


19

배치 스크립트에서 zip 파일을 만들려고합니다. archive_.zip과 같은 이름이 필요합니다.

불행히도 슬래시로 인해 날짜가 y / m / d와 같은 시스템에서는 작동하지 않습니다.

zip some_options "archive_%DATE%.zip"

%DATE%변수는 같은으로 확장

Mon 09/28/2009

gnuwin32 패키지에 액세스 할 수 있으므로 sed공백과 슬래시를 대시로 바꿀 수 있습니다. 문제는 sedzip 아카이브의 파일 이름을 생성하기 위해 출력을 어떻게 사용 합니까?

유닉스 (bash)에서, 백 쿼트를 사용하여 명령을 제자리에서 평가하고 다른 명령에서 출력을 사용할 수 있습니다.

zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip

Windows에서도 비슷한 기능이 있습니까?

또는 변수를 반환 값으로 설정 sed하고 파일 이름을 구성하는 데 사용할 수 있습니까?

답변:


27

다음을 사용하여 변수의 기호를 바꿀 수 있습니다.

set _date=%DATE:/=-%

1
이것은 깔끔한 트릭입니다!
Cristi Diaconescu

추신 : 공간이나 다른 불쾌한 캐릭터를 제거하는 '한 줄짜리'방법이 있습니까? (각 캐릭터가 교체 할 3 번째 ... n 번째 임시 변수를 갖는 것과는 대조적으로)
Cristi Diaconescu

죄송합니다 그런 것은없는 것 같습니다. 이를 위해서는 구문으로 대체해야합니다. NB : 이것은 배치 프로그래밍에 대한 훌륭한 참고 자료입니다. robvanderwoude.com/batchfiles.php
Christopher

5
이것은 다음보다 훨씬 빠릅니다. %date:~-10,2%-%date:~-7,2%-%date:~-4,4% !
Jess Stone

Jess Stone의 답변을 아무도 +1하지 않았습니다! 나에게서 +1!
Arvo Bowen

5

나는 항상 사용합니다 :

For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d

그런 다음 CDate는 Sat02182012가됩니다. 더 정렬 가능하게 만들려면 CDate를 %% d-%% b-%% c로 설정하면 2012-02-18이됩니다.

For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g

날짜 / 시간 폴더 / 파일 친화적


4

나는 여기 비슷한 질문에 대한 답변을 게시했습니다 . harrymc의 답변에 여러 줄 대신 필드에서 날짜를 쪼개는 것이 한 줄로 이루어집니다.

흥미로운 부분은 다음과 같습니다.

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%

그리고 경고는 여전히 관련이 있습니다.

경고 : 날짜 형식 (yyyymmdd = %% k %% j %% i)은 지역 설정에 따라 다릅니다. 프랑스어 날짜 형식 (dd / mm / yyyy)을 사용하기 때문에 "%% k %% j %% i"를 형식 (%% i = 일, %% j = 월, %% j = 년).

지역 설정이 미국 스타일 (mm / dd / yyyy)로 설정된 경우 "%% k %% i %% j"(%% i = 월, %% j = 일, %% j = 연도)를 사용해야합니다. .


3
zip some_options "archive_%date:/=-%.zip"

/=-대체 /마이너스 기호.


2

이 끔찍한 코드는 원하는 것과 같은 것을해야합니다.

move "Filename.txt" "Filename%date:~6,4%%date:~3,2%%date:~0,2%_%Time:~0,2%%Time:~3,2%%Time:~6,2%.txt"

파일 이름을 적절히 변경하면


1
괴물을 설명 할까? :)
Cristi Diaconescu

기본적으로 날짜에서 비트를 자르고 파일 이름의 중간에 먹이는 것입니다. 에코를 수행하여 명령 줄에서 공포의 일부를 테스트하여 에코 할 수 있으므로 echo % date : ~ 6,4 %를 제공합니다. 년. 날짜와 시간을 하위 문자열로 묶는 것입니다.
Col

흥미 롭군 안타깝게도 휴대 성이 좋지 않은 ...
Cristi Diaconescu

불행하게도 하위 문자열을 사용할 때의 문제는 특정 날짜 형식에 의존하고 다르면 부풀려진다는 것입니다. yyyy-MM-dd를 사용하도록 설정된 날짜가 있으므로 내 컴퓨터에서 echo %date:~6,4%%date:~3,2%%date:~0,2%반환 9-289-20됩니다 (오늘은 2009-09-28입니다).
Joshua

사실, 나는이 솔루션을 하나의 컴퓨터에서만 사용하므로 너무 큰 문제는 아닙니다.
Col

2

귀하의 질문에 Windows 태그가 지정되어 있기 때문에 좋은 오래된 .bat 파일에서 작동하는이 솔루션을 발견했습니다.
"MMDDYYYY 형식으로 현재 날짜를 가져 오는 Windows 배치 파일 (.bat)" ,
아마도 귀하의 경우 에 맞출 수 있습니다 :


@REM Seamonkey의 빠른 날짜 배치 에 반향 (MMDDYYYY 형식)
@REM 설정 % date 변수
@REM 먼저 월, 일 및 연도를 mm, dd, yyyy 형식으로 구문 분석 한 다음 MMDDYYYY로 결합합니다.

FOR / F“TOKENS = 1 * DELIMS =”%% A IN ( 'DATE / T') DO CDATE = %% B
FOR / F“TOKENS = 1,2 eol = / DELIMS = /”%% A IN ( 'DATE / T') DO SET mm = %% B
FOR / F“토큰 = 1,2 DELIMS = / eol = /”%% A IN ( 'echo % CDATE %') DO SET dd = %% B
FOR / F“토큰 = 2,3 DELIMS = /”%% A IN ( 'echo % CDATE %') DO SET yyyy = %% Bv vSET 날짜 = % mm %% dd %% yyyy %

이것은 % date 변수를 MMDDYYYY 형식으로 오늘 날짜로 설정하는 것 외에는 스크립트에서 나중에 호출 할 수 있습니다.

편집은
더 나은 구문을 발견. 내 날짜가 오늘 "월 28/09/2009"인 경우 :
set day = % Date : ~ 0,2 %
set month = % Date : ~ 7,2 %
set year = % Date : ~ 10,4 %


2

gnuwin32-'date '와 결합 된 cmd.exe 버전 :

%> for /F "usebackq" %d in ( `date.exe +"%y%m%d"` ) do zip archive_%d.zip <folder>

그래서 할 수 있는 적절한 대체 해! 당신이 저를 요구하는 경우 '에 대한'명령은 ... 하나 개의 이상한 구문
크리스티 Diaconescu

나는 그것을 할 수 없다고 주장하지 않았다 :) 어쨌든 전체 'cmd'물건은 미친 사람이다. 'for'cmd는 실제로 첫 번째 패스에서 행 (일명 '루핑')을 만든 다음 이렇게 만들어진 스크립트를 실행합니다.
akira

1

cscript + vbasic 사용은 어떻습니까?

WScript.shell.run "zip archive_" & DatePart("yyyy", Now) & "_" & DatePart("m", Now) & "_" & DatePart("d", Now) & ".zip " & WScript.arguments(0)

통해 전화

cscript /nologo zip_it.vbs

1

/ f "tokens = 1,2,3,4,5 delims = /."( 'date / T')의 %% a는 CDate = %% d-%% b-%% c를 설정합니다.

@echo 데이터 = % CDate %

이것은 현재 가장 흔한 년-월-일입니다


1

사용자가 지역 설정을 수정 한 경우 %DATE%또는 출력 중 하나를 사용하는 솔루션이 date /t중단 될 수 있습니다. 예를 들어, 나는 내 "간단한 날짜"형식을하기 위해 설정 한 "yyyy-MM-dd"나는 그래서, %DATE%동일 "2012-02-18"하고,date /t 같은 출력을 생성합니다. (이것은 Windows 7 용이며 이전 버전의 Windows와 동일하다고 가정합니다.)

배치 파일을 작성한 다음 실행하십시오.

GNU date명령을 사용할 수 있으므로 다음과 같이 할 수 있습니다.

C:\path\to\gnu\date "+zip some_options archive_%Y-%m-%d.zip" > tmp.bat
call .\tmp.bat

tmp.bat 다음과 같은 내용이 포함됩니다.

zip some_options archive_2012-02-18.zip

이것은 tmp.bat현재 디렉토리에 작성 되며 이는 문제점 일 수 있습니다. 만드는 것이 더 나을 수 있습니다%TEMP%\tmp.bat . 또한 파일을 나중에 제거하지 않았습니다. 할만 큼 쉽습니다.

date +FORMAT형식 문자열 date과 유사하게 명령 의 출력 형식을 지정할 수 있습니다 printf. 자세한 내용 은 coreutils 날짜 설명서 를 참조하십시오. 형식에는 임의의 텍스트가 포함될 수 있으므로이 경우조차 사용할 필요가 없습니다 sed.


1

당신이 모든 사람의 비트를 합치면 당신에게 맞는 것을 얻습니다. 이것은 성능 모니터의 트리거에 대한 응답으로 실행중인 프로세스의 스냅 샷을 제공하기 위해 Windows 2003 시스템에 있습니다.

@echo off
For /f "tokens=1,2,3,4,5 delims=/. " %%i in ('date /t') do set CDate=%%k%%j%%i
For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g
tasklist /fo table >tasklist%CDate%%CTime%.txt

출력 파일은 분리 문자없이 하나의 문자열로 이름이 지정됩니다.


0
zip [...] archive_`echo %DATE% | tr / -`.zip

작동해야합니다.

반면에-아마도 당신은 date명령을 사용할 수 있습니다 (Windows를 모르겠습니다). 그렇다면 다음을 수행하십시오.

zip [...] archive_`date +'%Y-%m-%d'`.zip

백틱 트릭은 cmd.exe에서 작동하지 않습니다. 그리고 Windows 'date'명령은 형식을 처리 할 수 ​​없습니다 :(
Cristi Diaconescu 12

-1

그것이 당신에게 적합한 지 확실하지 않지만 내 코드는

@ECHO OFF
set ldt=%date% %time%
echo %ldt%>> logs.txt

OP는 파일 내용이 아닌 파일 이름 에 현재 날짜가있는 파일을 원합니다
Jan Doggen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.