728x90
목차

1. FileExist() - 파일의 상태 속성

2. FileGetSize - 파일의 크기

3. FileGetTime / FileSetTime - 파일의 시간정보

 

 

자기 자리에서 개인용 매크로를 사용할 때는 지금 상태에 대해 개발자가 100% 알고 있습니다.

그래서 큰 실수가 일어나지 않지만 같은 파일에 여러가지 프로토콜이 연결되면 복잡해지기 시작합니다.

특히 사용자가 직접 접근해서 수정하는 상황에서는 예상할 수 있는 일들이 너무 많아집니다.

그런 때 사용하는 파일의 현재 상태를 알아오는 FileExist()와 그외 명령어를 몇개 정리하겠습니다.

 

 

1. FileExist()

 

① FileExist의 의미와 매개변수

 

AttributeString := FileExist(FilePattern) : 파일이나 경로명인 "FilePattern"이 있는지를 확인하고 속성을 불러와 변수 " AttributeString"에 입력합니다.

  • FilePattern : 파일명이나 경로의 이름입니다. 전체 경로를 입력하지 않으면 지금 선택되어 있는 %A_WorkingDir%에 저장됩니다. 보통의 경우에는 %A_WorkingDir%은 메크로 실행파일이 있는 폴더입니다.
  • 반환값(AttributeString) : 한문자로 된 속성값이 반환됩니다. 만일 파일/경로가 없는 경우에는 빈문자가 반환됩니다. 문자 "False"가 아니라 빈문자가 되어 "False" 상태로 간주되는 것입니다. 사용하려면 논리 연산자나 if 같은 명령어와 조합해야 합니다.

 

② FileExist의 반환값

 

FileExist가 반환하는 값들은 정해져 있습니다.

파일의 상태에 따라서 다른 값을 불러옵니다.

Auto Hot Key 공식 포럼  FileExist() - Syntax & Usage | AutoHotkey (ahkscript.github.io) 에서 불러왔습니다.

 

  • R = READONLY(읽기 전용) : 파일의 속성에서 읽기 전용으로 되어 있는 경우입니다.
  • A = ARCHIVE(보관) : 파일에 저장되 있는 경우로 거의 대부분 속성을 가지고 있습니다.
  • S = SYSTEM(시스템) : 시스템 파일을 의미하고 "windows"등 설정폴더에 있는 .dat 파일등이 해당됩니다.
  • H = HIDDEN(감춤) : 숨김 속성을 가지고 있는 폴더입니다.
  • N = NORMAL(정상)
  • D = DIRECTORY(디렉토리) : 파일이 아닌 경로명일 때 사용됩니다.
  • O = OFFLINE(오프라인)
  • C = COMPRESSED(압축) : 압축파일인데 window가 압축한 zip 파일은 해당하지 않습니다.
  • T = TEMPORARY(임시)
  • X : 아무 속성이 없을 때 
  • 여러 개의 속성이 해당할 때는 여러단어를 반환합니다. RAH : 읽기전용의 숨겨진 파일

 

사용자가 파일에 임의로 변경한 내용이 아닌 파일의 속성 자체가 변해야 합니다.

 

 

③ 사용예시

 

^F3:: ;예시 1번 Windows 폴더의 시스템 파일입니다.

testnm := FileExist("C:\Windows\bootstat.dat")
msgbox %testnm%

return

^F4:: ;예시 2번

testnm := FileExist("abcd.exe")
if !testnm
{
msgbox "파일이 존재하지 않습니다."
}

return

 

사용결과 예시 1번의 경우 AS(보관파일, 시스템 파일)이 반환되고, 예시 2번은 존재하지 않는다는 매시지가 출력됩니다.

명령어의 동작은 심플하지만 사용할 수 있는 상황은 많습니다.

 

예시1의 결과 / 예시 2의 결과

 

320x100

 

 

2. FileGetSize

 

FileGetSize, OutputVar , [Filename], [Units] : 파일(Filename)의 크기를 읽어와서 변수( OutputVar)에 입력합니다.

  • OutputVar : 변수의 이름입니다. 여기에 숫자형식으로 결과가 입력이 됩니다.
  • Filename : 크기를 읽어오고 싶은 파일의 이름입니다. 경로명을 입력하지 않으면 %A_WorkingDir%(현재폴더)에서 파일명을 찾습니다. 아예 입력하지 않으면 %A_WorkingDir% 가장 앞의 파일을 가지고 옵니다.
  • Units : 출력을 하는 단위입니다. 입력하지 않으면 Byte 단위로 가지고 옵니다. K = 킬로바이트, M = 메가바이트입니다.

 

경로명을 입력할 경우 순수하게 경로의 크기인 0을 불러옵니다.

경로안에 접근하여 모든 파일의 합을 구하도록 해야합니다.

사용 예제는 심플합니다.

^F3:: ;

FileGetSize testnm, 예제 24.zip, k
msgbox %testnm%

return

 

 

 

3. FileGetTime / FileSetTime

 

파일에는 기록되고 읽은 시간 정보가 있습니다.

시간정보를 읽어오는 FileGetTime과 다시 쓰는 FileSetTime입니다.

Windows에서는 파일에 속성에 확인할 수 있습니다.

 

Windows에서 시간 보기

 

FileGetTime, OutputVar , [Filename], [WhichTime] : 파일이나 경로의 정보를 불러옵니다.

  • OutputVar : 변수의 이름입니다. 여기에 결과가 입력이 되는데 YYYYMMDDHHMIMSS로 입력되며 형식은 FileSetTime에서 변경할 수 있습니다. 운영체계에서 사용하는 시간을 불러옴으로 보통은 현지시간입니다.
  • Filename : 시간을 읽어오고 싶은 파일의 이름입니다. 경로명을 입력하지 않으면 %A_WorkingDir%(현재폴더)에서 파일명을 찾습니다. 아예 입력하지 않으면 %A_WorkingDir% 가장 앞의 파일을 가지고 옵니다.
  • WhichTime : 어떤 시간을 가지고 올지 결정하고 비어있으면 M입니다.
    M = 수정한 날짜/시간
    C = 만들어진 날짜/시간
    A = 엑세스한 날짜/시간

설명이 단순한 만큼 사용하는 예시도 간단합니다.

예시) FileGetTime, TestNm, 예제.txt, C

 

불러오는 파일이 있으니 쓸 수도 있습니다.

쓰게되면 원래 시간에 관한 정보가 없어짐으로 보통 특수목적으로 접근하여 자주사용하지는 않습니다.

 

FileSetTime , [YYYYMMDDHH24MISS], [FilePattern], [WhichTime], [OperateOnFolders], [Recurse] : 파일이나 경로명의 날짜시간 정보를 변경합니다. 추천할 수는 없지만 매개변수 전체를 입력하지 않아도 동작할 수 있습니다.

 

  • YYYYMMDDHH24MISS : 시간을 입력할 수 있습니다. 시간 형식에 FileSetTime, YYYY.MM.DD 이라고 입력하는 방식이 추천됩니다. 비어 있을 경우 OS가 알려주는 지금시간으로 입력됩니다. 참고로 1601년 미만은 지원하지 않는다고 합니다.
  • FilePattern : 파일명이나 경로명을 입력합니다. 경로명을 입력하지 않으면 %A_WorkingDir%(현재폴더)에서 파일명을 찾습니다. 이 자리를 비어두면 %A_WorkingDir% 가장 앞의 파일을 가지고 옵니다.
  • WhichTime : 어떤 시간을 가지고 올지 결정하고 비어있으면 M입니다.
    M = 수정한 날짜/시간
    C = 만들어진 날짜/시간
    A = 엑세스한 날짜/시간
  • OperateOnFolders : 동작방식을 결정합니다. 입력하지 않으면 0으로 처리됩니다.
    0 : 지정한 파일만 시간을 변경합니다.(디폴트)
    1 : 와일드 카드에 포함되는 모든 파일과 폴더가 처리됩니다.
    2 : 파일이 있는 지정 경로(폴더)의 시간만 변경합니다.
  • Recurse : 0으로 입력할 경우 입력한 경로(폴더)에만 해당하여 작동합니다. 1을 입력하면 하위폴더까지 모두다 변경합니다. 입력하지 않으면 디폴트는 0으로 되어 있습니다.

 

이 명령은 와일드 카드를 쓸 수 있는데 C:\내 문서\*.txt의 경우 와일드카드 *, 경로내의 모든 txt 파일로 인식합니다.

파일과 폴더의 경로명이 259문자를 뛰면 동작하지 않습니다. 그 파일을 무시하고 다음으로 넘어갑니다.

 

예제) FileSetTime, 20141105, C:\Temp\*.*, M : Temp 폴더의 모든 파일의 수정한 날짜를 2014년 11월 05일로 변경합니다. 시간은 입력하지 않아서 00시 00분 00초로 입력됩니다.

 

 

 

 

반응형

+ Recent posts