먼저 확인
원본을 보관하고 새 작업 사본에서 EXIF DateTimeOriginal을 읽으세요. TestName으로 예상 이름을 확인한 뒤 FileName으로 적용합니다. 같은 이름은 카운터로 구분하고 촬영일 없는 파일은 건너뜁니다. 이 예제는 Windows의 PowerShell7.3 이상·기본 인자 처리·.jpg JPEG만 다룹니다.
명령 적용 조건
- 실행 환경
- Windows · PowerShell7.3 이상 · Windows/Standard 인자 처리
- 작업 대상
- 새 사본 폴더의 .jpg JPEG · 하위 폴더 재귀 없음
- 촬영일 기준
- EXIF DateTimeOriginal만 · XMP/파일 수정 시각 대체 없음
- 적용 순서
- 태그 읽기 → TestName → 이름 확인 → FileName → 결과 검수
- 작업 결과
- 파일명 변경 · 사진 내용/촬영일 수정/메타데이터 삭제 아님
목차
1. 촬영일 파일명 확인 순서
-
1. 환경과 사본 확인
PowerShell 버전·인자 처리와 ExifTool 경로를 확인합니다. 원본 폴더는 보관하고 없는 새 폴더에 사본을 만듭니다.
-
2. 정확한 EXIF 촬영일 읽기
사본의 EXIF DateTimeOriginal을 읽습니다. XMP나 파일 수정 시각을 같은 값으로 대체하지 않습니다.
-
3. 예상 이름 검토
TestName 결과의 날짜·확장자·경고·충돌 카운터를 확인합니다. 잘못된 태그나 경로가 보이면 적용을 멈춥니다.
-
4. 사본 이름 변경
미리보기와 같은 대상·옵션에서 TestName을 FileName으로 바꿉니다. 원본 폴더를 대상으로 삼지 않습니다.
-
5. 실제 결과 대조
이름·파일 수·촬영일·해당 사진의 열림을 확인합니다. 내용 동일성은 변경 전후의 대응 파일 해시로 추가 대조할 수 있습니다.
2. 사본 준비
이미 ExifTool을 선택했고 JPEG 촬영일을 파일명에 넣으려는 경우를 다룹니다. 프로그램 선택·공식 Windows ZIP·EXE와 exiftool_files 폴더 준비는 엔티티 안내를 따르세요. 설치나 PATH 변경은 이 절차의 목적이 아닙니다. GUI 이름 변경이 필요하면 파일명 일괄 변경 가이드나 Advanced Renamer를 비교합니다.
아래 두 명령으로 PowerShell7.3 이상이고 인자 처리가 Windows 또는 Standard인지 확인합니다. 기본 Windows PowerShell5.1·Legacy 설정·CMD/BAT에는 이 예제를 그대로 사용하지 않습니다. 셸 설정을 바꾸는 절차는 포함하지 않습니다.
$PSVersionTable.PSVersion
$PSNativeCommandArgumentPassing
공식 실행 파일을 exiftool.exe로 준비한 실제 위치를 다음 예시 경로 대신 넣습니다. EXE 하나만 다른 폴더로 옮기지 마세요. 버전 출력은 도구가 준비됐다는 확인이며 사진 이름 변경 성공을 뜻하지 않습니다.
$exifTool = 'C:\Tools\ExifTool\exiftool.exe'
& $exifTool -config '' -ver
원본 사진 폴더의 부모 위치에서 진행하는 예시입니다. 원본 사진과 작업 사본은 예시 이름이므로 실제 폴더와 모든 명령의 대상을 함께 맞춥니다. 먼저 목적지 확인 결과가 False인 새 폴더를 선택하세요. 이미 존재하는 폴더에 사본을 덧씌우지 않습니다.
Test-Path -LiteralPath '.\작업 사본'
Copy-Item -LiteralPath '.\원본 사진' -Destination '.\작업 사본' -Recurse
한글 경로는 Windows 명령줄에서 다른 인코딩으로 전달될 수 있습니다. 다음은 작업 사본 경로 한 줄을 UTF-8 인자 파일에 기록하는 명령입니다. 실제 작업 사본 이름으로 바꾸고 경로 앞뒤에 별도 따옴표를 파일 내용으로 넣지 않습니다. NoClobber는 기존 rename-path.txt의 덮어쓰기를 거부합니다. 파일이 이미 있으면 새 인자 파일 이름을 고르고 이후 -@의 이름도 함께 바꿉니다.
'.\작업 사본' | Out-File -LiteralPath '.\rename-path.txt' -Encoding utf8NoBOM -NoClobber
원본을 따로 보관
명령 대상은 인자 파일에 적은 작업 사본 폴더입니다. 원본·공유 폴더·동기화 중인 자료에서 바로 적용하지 마세요. 아래 예제는 .jpg만 선택하고 하위 폴더를 순회하지 않습니다. .jpeg·HEIC·RAW·영상 파일은 이 예제의 시험 범위에 포함되지 않습니다.
3. 촬영일 태그
& $exifTool -config '' -charset filename=UTF8 -G1 -a -s -EXIF:DateTimeOriginal -ext jpg -@ '.\rename-path.txt'
-@는 준비한 인자 파일의 경로를 읽습니다. -charset filename=UTF8을 -@보다 앞에 두어 한글 경로를 UTF-8로 전달합니다. -EXIF:DateTimeOriginal은 정확한 EXIF 촬영일을 지정합니다. 출력에 보이는 ExifIFD 그룹의 날짜와 자기 사진의 촬영 시점을 비교하세요. 같은 이름의 XMP 값, CreateDate 또는 FileModifyDate를 읽는 절차와 구분합니다.
촬영일이 없거나 잘못 기록된 사진에서는 원하는 날짜를 얻을 수 없습니다. 이 가이드는 날짜를 고치거나 시간대·카메라 시계를 보정하지 않습니다. 값이 의심스러우면 미리보기 단계에서 멈추고 날짜 기준을 먼저 판단하세요. 카메라 시계의 오차를 알고 있는 경우에는 JPEG 촬영 시각 보정·원본 보존을 먼저 확인한 뒤 이름 변경으로 돌아오세요.
4. 미리보기
& $exifTool -config '' -charset filename=UTF8 -ext jpg -if '$EXIF:DateTimeOriginal' -d '%Y%m%d_%H%M%S%%-c.%%e' '-TestName<EXIF:DateTimeOriginal' -@ '.\rename-path.txt'
-TestName은 변경 전후 이름을 보여 주는 미리보기입니다. -if는 정확한 EXIF 촬영일이 있는 대상만 고릅니다. 촬영일이 없는 파일을 건너뛰었다는 메시지를 전체 사진 성공으로 해석하지 마세요.
%Y%m%d_%H%M%S는 날짜와 시각을 이름에 사용합니다. %%-c는 목표 이름이 이미 있거나 같은 초 사진이 겹칠 때 숫자를 붙여 구분하고 %%e는 확장자를 사용합니다. 카운터는 이름 충돌 구분자이며 연속 촬영 순서를 증명하지 않습니다.
| 시험 입력 | 적용 뒤 이름 |
|---|---|
| 기존 20240102_030405.jpg | 그대로 보존 |
| 같은 초 EXIF JPEG 두 개 | 20240102_030405-1.jpg · -2.jpg |
| later.jpg · 다른 시각 | 20240102_040506.jpg |
| no-date.jpg · EXIF 없음 | 원래 이름 유지 |
| xmp-only.jpg · XMP만 있음 | 원래 이름 유지 |
| not-a-jpeg.txt | 선택 대상 아님 |
위 날짜·이름은 직접 만든 시험 자료의 결과입니다. 자기 파일의 값·현재 폴더 내용에 따라 이름과 카운터가 달라집니다. 미리보기와 적용 사이에 파일을 추가하거나 이동했다면 다시 미리보기하세요. 경고·잘못된 날짜·원치 않는 이름이 보이면 적용하지 않습니다.
5. 이름 변경
& $exifTool -config '' -charset filename=UTF8 -ext jpg -if '$EXIF:DateTimeOriginal' -d '%Y%m%d_%H%M%S%%-c.%%e' '-FileName<EXIF:DateTimeOriginal' -@ '.\rename-path.txt'
미리보기와 같은 조건에서 TestName을 FileName으로 바꾼 명령입니다. 변경 대상이 작업 사본인지 다시 확인하세요. 이 명령에는 원본 덮어쓰기 옵션이나 재귀 옵션을 넣지 않았습니다.
촬영일을 파일명에 사용하는 작업이지 사진 태그 자체를 고치거나 메타데이터를 지우는 작업은 아닙니다. 이름만으로 실제 촬영 시간의 정확성이나 촬영 순서가 보장되지는 않습니다.
6. 결과 확인
Get-ChildItem -LiteralPath '.\작업 사본' -File | Select-Object -ExpandProperty Name
& $exifTool -config '' -charset filename=UTF8 -G1 -a -s -EXIF:DateTimeOriginal -ext jpg -@ '.\rename-path.txt'
실제 바뀐 이름과 건너뛴 이름, 파일 수와 촬영일 값을 확인합니다. 원본 폴더가 그대로인지 대조하고 바뀐 사본을 열어 필요한 사진인지 확인하세요. 다른 사진에 붙은 이름이나 일부 실패·남은 파일을 정상 완료로 넘기지 않습니다.
내용 동일성을 더 확인하려면 변경 전후 이름으로 대응하는 파일의 SHA256을 비교합니다. 다음은 시험의 later.jpg와 실제 결과 이름 한 쌍이며 자기 파일의 대응 이름으로 바꿉니다. 같은 사진의 두 Hash가 같아야 합니다. 서로 다른 사진의 이름을 잘못 대응하면 이 비교도 의미가 없습니다.
Get-FileHash -LiteralPath '.\원본 사진\later.jpg', '.\작업 사본\20240102_040506.jpg' -Algorithm SHA256
직접 확인한 범위
Windows의 PowerShell7.6.5 기본 Windows 인자 처리와 ExifTool13.59에서 자체 JPEG6개·TXT1개로 게시 명령을 시험했습니다. 한글·공백 폴더에서 미리보기 불변, 정확한 EXIF JPEG3개만 변경, 목표 이름 충돌 방지, EXIF 없음/XMP만 있음/비JPEG 제외를 확인했습니다. 파일7개의 내용 SHA256·수와 원본은 보존됐습니다. 실제 카메라 사진·다른 형식·시간대 정확성·사진 뷰어의 표시를 시험한 결과는 아닙니다.
7. 제외된 사진
| 관찰 | 확인·다음 행동 |
|---|---|
| DateTimeOriginal 없음 | 정확한 EXIF 태그가 없는 대상입니다. 파일 수정 시각으로 자동 대체하지 않습니다. |
| XMP 촬영일만 존재 | 이 예제는 EXIF만 사용해 건너뜁니다. XMP로 바꾸는 작업은 별도 기준입니다. |
| 같은 초 사진·기존 이름 | 충돌 숫자를 확인합니다. 숫자를 촬영 순서로 읽지 않습니다. |
| 잘못된 날짜·오류·일부 실패 | 사본과 진단을 확인하고 멈춥니다. 종료 코드나 업데이트 숫자 하나로 성공을 단정하지 않습니다. |
| 원래 이름으로 다시 시작 | 보관한 원본에서 새 사본을 준비합니다. 바뀐 이름만으로 원래 이름 자동 복구를 보장하지 않습니다. |
이름 변경 규칙을 GUI에서 선택하려면 Advanced Renamer 또는 기존 파일명 변경 경로로 돌아가세요. 목적이 사진 정보 삭제라면 이 명령 대신 JPEG 사본 생성·태그·색상·회전 확인에서 별도 과업을 확인합니다.
8. 자주 묻는 질문
촬영일이 없는 사진은 파일 수정 시각으로 바뀌나요?
+
아닙니다. 이 예제는 EXIF DateTimeOriginal이 있는 .jpg만 고르고 FileModifyDate·CreateDate·XMP로 자동 대체하지 않습니다.
같은 시각의 사진 뒤 숫자는 촬영 순서인가요?
+
이름 충돌을 피하기 위한 카운터입니다. 처리 순서와 폴더의 기존 파일에 따라 달라지며 실제 촬영 순서를 증명하지 않습니다.
기본 Windows PowerShell5.1에도 복사해서 실행하나요?
+
이 예제는 PowerShell7.3 이상과 Windows/Standard 인자 처리로 한정합니다. 빈 -config 인자 전달이 달라지는 5.1·Legacy 설정·CMD/BAT에 그대로 적용하지 마세요. GUI 경로는 기존 파일명 일괄 변경 가이드에서 비교할 수 있습니다.
이름을 바꾸면 촬영일 태그와 사진도 수정되나요?
+
여기서는 FileName으로 이름을 바꾸며 촬영일을 쓰거나 메타데이터를 삭제하지 않습니다. 자체7파일 시험에서는 대응 파일의 내용 해시가 같았습니다. 모든 형식·상황의 결과로 일반화하지 않고 자기 사본을 확인하세요.
나중에 원래 이름으로 자동 되돌릴 수 있나요?
+
새 이름만으로 원래 이름을 복원할 수 있다고 보장하지 않습니다. 원본과 변경 전후 이름 대응 기록을 보관하고 다시 시작할 때 원본에서 새 사본을 준비하세요.
9. 참고 자료
관련 가이드
함께 보면 좋은