간단할 줄 알았는데 생각보다 어려운 일인 것 같습니다.
타임스탬프를 추가하여 파일을 복사하여 붙여넣고 싶습니다. 다음 코드를 사용하여 타임스탬프를 얻습니다.
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%
이렇게 하면 파일이 다음 FILE.TXT
과 같이 됩니다.FILE.TXT_2015-03-05_11h56m32s
하지만 난 분명히 그랬으면 좋겠어FILE_20150305_11h56m32s.TXT
파일 확장자는 확장자나 길이가 될 수 있습니다. 도움을 주셔서 감사합니다.
편집: FileAffected는 따옴표와 함께 전달되므로 ~0,-1로 제거했습니다.
내가 이렇게 하면 다음과 같은 사실을 발견했습니다.
FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)
FileAffected를 에코하면 공백이 포함된 전체 경로 이름을 얻게 됩니다. 그러나 FOR /F 명령을 사용하면 파일 이름에서 공백 뒤의 모든 내용이 잘립니다. "IN" 명령에서 "%FileAffected" 변수에 추가 따옴표를 추가해도 여전히 문제가 해결되지 않으며 fi 또는 xi 주위에 따옴표를 추가하지도 않습니다.
답변1
파일 이름에 날짜와 시간을 접미사로 추가하려면 어떻게 해야 합니까?
다음 배치 파일을 사용하십시오.
@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1
산출:
F:\test>test file.txt
file_3/01_18h07m40s.txt
예를 들어 파일 이름에 공백이 포함된 경우 다음 file with space.txt
을 수행해야 합니다.부르다"
다음과 같이 파일 이름 주위에 s 가 있는 배치 파일 :
F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt
매개변수 확장
%~n1
%1을(를) 파일 확장자 C:\utils\MyFile이 없는 파일 이름으로 확장하거나 경로만 있는 경우(뒤에 백슬래시 없음) 해당 경로의 마지막 폴더를 확장합니다.
%~x1
%1을(를) 파일 확장자로만 확장 - .txt
"큰따옴표 사용
단일 매개변수에 공백이 포함된 경우에도 "따옴표"로 묶어 하나의 항목으로 전달할 수 있습니다. 이는 긴 파일 이름에 적합합니다.
매개변수를 사용하여 다음과 같은 파일 이름을 제공하는 경우:
MyBatch.cmd "C:\Program Files\My Data File.txt"
이 매개변수는 다음과 같습니다.
%0 = 마이배치
%1 = "C:\Program Files\내 데이터 파일.txt"
추가 자료
- Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
- 매개변수- 명령줄 인수(또는 매개변수)는 배치 스크립트에 전달되는 모든 값입니다.
- 통사론- 이스케이프 문자, 구분 기호 및 따옴표.