⚠ 이 강좌는 오토핫키 v2를 다룹니다
지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만,
새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.
93. Loop Files
마지막 수정일: 2023-12-22
등산을 할 때 어려운 봉우리를 넘으면 한결 괜찮은 기분을 느낄 수 있습니다. 그리고 그 봉우리가 이 산의 마지막 봉우리였다면 그 기분은 이루 말할 수 없겠지요.
지난 정규식을 끝으로 더이상 프날 오토핫키 강좌의 어려운 부분은 없습니다. 이제 좀 느긋하게, 파일과 관련된 함수 몇 가지만 배우면 99강을 끝으로 강좌가 마무리되게 됩니다. 마지막 남은 한 걸음, 힘내봅시다!
Loop Files
Loop Parse
기억하시나요?
전체 문자열을 구분자를 기준으로 쪼개 순차적으로 반복해주는 제어문이었죠.
오늘 배울 Loop Files
도 마찬가지입니다.
문자열을 반복해주는 것이 아닌, 원하는 경로의 파일 목록을 순차 반복해줍니다.
Loop Files, FilePattern [, Mode]
Loop Files의 원형
- FilePattern: 목록을 가져올 파일 패턴입니다.
- Mode: 함수의 모드(옵션)입니다.
'파일 패턴'은 특정 파일(여러개일 수 있음)을 나타내는 문자열입니다.
일반적으로 경로/파일명.확장자로 표기하여 단일 파일을 나타낼 수 있으며, '아무래도 좋은' 부분은 *
기호로 대체하여 여러 파일을 대상으로 설정할 수도 있습니다.
예를 들어서 Files/Texts/*.txt는 현재 폴더 기준 Files > Texts 폴더에 있는 모든 txt 파일과 매칭되는 파일 패턴이며, Files/*.*는 Files 폴더 안의 모든 파일(모든 파일명 + 모든 파일 확장자 = 모든 파일)과 매칭됩니다.
'모드'는 기초 강좌인 이곳에서는 문자열 D
로 적는 '디렉토리' 모드만 설명합니다.
문자열 D
를 이곳에 적으면 가져올 목록에 파일 뿐만 아니라 폴더까지 가져오게 됩니다.
Loop Files 안에서 쓸 수 있는 내장 변수
Loop Parse
안에서 A_LoopField
를 썼듯이, Loop Files
에서도 읽어온 파일 목록이 담긴 내장 변수가 있습니다.
내장 변수 | 설명 |
---|---|
A_LoopFileName | 파일의 이름 |
A_LoopFileExt | 파일의 확장자 |
A_LoopFilePath | 파일의 경로 (짧은 버전) |
A_LoopFileFullPath | 파일의 경로 (긴 버전) |
A_LoopFileTimeModified | 파일의 수정 시간 |
A_LoopFileSize | 파일의 크기 (바이트) |
A_LoopFileSizeKB | 파일의 수정 시간 (킬로바이트) |
A_LoopFileSizeMB | 파일의 수정 시간 (메가바이트) |
모든 내장 변수를 다루진 않았고, 보통은 이름이나 경로 정도만 쓰입니다.
이들은 각 반복마다 각각의 파일과 관련된 정보가 순차적으로 담깁니다.
첫 번째 반복에선 A_LoopFileName
에 첫 번째 파일의 이름이, 두 번째엔 두 번째 파일의 이름이... 이런식으로 말이죠.
실습
1. 바탕화면의 모든 파일 이름 순차적으로 가져오기
1 Loop Files, A_Desktop "\*.*"
2 {
3 MsgBox(A_LoopFileName)
4 }
A_Desktop
은 바탕화면의 경로가 담긴 내장변수입니다.
예전에 배웠는데, 기억하시나요?
바탕화면의 모든 파일을의 이름을 순차적으로 출력하는 예제입니다.
2. Texts 폴더의 모든 .txt 파일의 이름 가져오기
1 Loop Files, "Texts\*.txt"
2 {
3 MsgBox(A_LoopFileName)
4 }
오토핫키에서 파일 경로는 상대 경로가 기준입니다.
현재 스크립트가 실행된 경로를 기준으로 탐색한다는 것인데요, 따라서 위 예제와 같이 Texts
라고 적으면 현재 오토핫키 스크립트의 실행 경로의 Texts 폴더를 의미하고, *.txt
를 통하여 .txt 확장자를 가진 파일만 대상으로 반복하게 하였습니다.
다음 강은 훨씬 쉽습니다.