본문 바로가기
파일·백업 자동화

[C# 파일 마스터 05] 수천 개 파일명 변경? C# 코드 몇 줄로 밤샘 업무 끝내기

by 일상 과학자 2026. 1. 28.

업무를 하다 보면 스크린샷, 영수증 스캔본, 혹은 분석 데이터 파일들이 폴더 하나에 수백 개씩 쌓이곤 합니다. 처음에는 구분이 가지만, 시간이 지나면 '제목 없음(1)', 'KakaoTalk_2024...'와 같은 이름만으로는 이 파일이 정확히 언제 생성된 것인지, 어떤 순서로 확인해야 하는지 파악하기가 매우 어렵습니다.

이런 파일들을 하나하나 마우스 우클릭하여 이름을 바꾸는 작업은 단순 반복 업무의 전형이며, 이 과정에서 오타가 발생하거나 실수로 파일을 삭제할 위험도 있습니다. "왜 우리는 매번 똑같은 정리 작업을 수동으로 반복해야 할까요?"라는 의문에서 자동화는 시작됩니다.

어지러운 폴더 구조가 깔끔하게 정리된 모습으로 변하는 과정

파일명 규칙 설계하기

오늘 구현할 자동화 도구의 핵심 로직은 간단하지만 명확합니다.

  1. 대상 폴더 스캔: 프로그램이 실행된 위치 혹은 지정된 경로의 모든 파일을 인식합니다.
  2. 메타데이터 추출: 파일의 '수정 날짜' 또는 '생성 날짜' 정보를 가져옵니다.
  3. 파일명 포맷팅: yyyy-MM-dd_기존파일명 혹은 순번을 붙인 형태로 이름을 재구성합니다.
  4. 예외 처리: 동일한 이름이 존재할 경우 덮어쓰지 않도록 중복 체크를 수행합니다.

알고리즘의 복잡함보다는 데이터의 일관성을 유지하는 것에 초점을 맞춥니다.

C# 콘솔 프로그램 

아래는 C#(.NET) 환경에서 작성된 핵심 로직입니다. 파일의 생성 날짜를 기준으로 파일명 앞에 날짜를 붙여주는 간단하면서도 강력한 코드입니다.

using System;
using System.IO;

namespace FileRenameAutomation
{
    class Program
    {
        static void Main(string[] args)
        {
            // 정리할 폴더 경로 (현재 실행 경로 기준)
            string targetDirectory = Environment.CurrentDirectory;
            
            Console.WriteLine($"[로그] 작업 시작 경로: {targetDirectory}");

            try
            {
                string[] files = Directory.GetFiles(targetDirectory);

                foreach (string filePath in files)
                {
                    FileInfo fileInfo = new FileInfo(filePath);
                    
                    // 프로그램 실행 파일 자체는 변경에서 제외
                    if (fileInfo.Extension == ".exe" || fileInfo.Extension == ".dll") continue;

                    string creationTime = fileInfo.CreationTime.ToString("yyyy-MM-dd");
                    string newFileName = $"{creationTime}_{fileInfo.Name}";
                    string newFilePath = Path.Combine(targetDirectory, newFileName);

                    // 이름 변경 실행
                    if (!File.Exists(newFilePath))
                    {
                        File.Move(filePath, newFilePath);
                        Console.WriteLine($"[성공] {fileInfo.Name} -> {newFileName}");
                    }
                    else
                    {
                        Console.WriteLine($"[건너뛰기] 중복된 파일명 존재: {newFileName}");
                    }
                }
                Console.WriteLine("\n[완료] 모든 파일 정리가 끝났습니다.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[오류 발생] {ex.Message}");
            }
        }
    }
}

실행 결과 및 활용 시나리오

이 프로그램을 실행하면 터미널 창에 작업 로그가 실시간으로 출력됩니다. 어떤 파일이 변경되었고, 어떤 파일이 중복되어 건너뛰었는지 한눈에 파악할 수 있습니다.

실제 활용 예시:

  • 영수증 관리: 매일 발생하는 스캔 파일들을 날짜별로 정렬하여 세무 처리를 용이하게 합니다.
  • 로그 파일 정리: 서버에서 생성되는 텍스트 파일들에 날짜 태그를 붙여 백업 폴더로 이동시키는 용도로 활용 가능합니다.
  • 사진 정리: 불규칙한 이름의 사진 파일들을 촬영 날짜순으로 일괄 변경하여 앨범 관리를 돕습니다.

C# 콘솔 화면에서 파일 이름이 성공적으로 변경되었다는 로그가 출력되는 모습

주의사항 및 실무 팁

자동화 도구는 편리하지만, 시스템에 직접적인 영향을 주므로 주의가 필요합니다.

  • 백업은 필수: 처음 프로그램을 실행할 때는 중요한 데이터가 없는 테스트 폴더에서 충분히 검증하세요.
  • 확장자 체크: 코드 내에서 .exe나 .dll 파일을 제외한 것처럼, 프로그램이 자기 자신이나 시스템 파일을 건드리지 않도록 예외 처리를 꼼꼼히 해야 합니다.
  • 권한 문제: 관리자 권한이 필요한 C:\Windows나 Program Files 폴더 내에서는 실행 시 권한 오류가 발생할 수 있으니 주의가 필요합니다.

마무리하며

오늘은 C# 콘솔을 활용해 반복적인 파일 정리 업무를 자동화하는 방법을 알아보았습니다. 단순한 코드 몇 줄이지만, 이것이 쌓이면 연간 수십 시간의 단순 노동을 줄여주는 강력한 자산이 됩니다.