xython (win32com + python)

(기타) 윈도우 파일탐색기의 선택 정보 갖고오기

작성자
sjpark
작성일
2025-03-18 21:01
조회
15

(기타) 윈도우 파일탐색기의 선택 정보 갖고오기

일을 하다보면, 파일을 확인하거나 파일의 이름을 변경하고 싶을 때도 있다. 물론 이름을 알고잇다면, 그것을 그대로 사용하면 되지만, 생각보다 다른 방법을 더 많이 사용하는데, 대부분 파일익스플로러에서 선택한 파일이나 폴더의 정보를 바꾸고 싶은 경우가 더 많다
  • 파일익스프로로에서 선택한것의 파일이름을 변경
  • 파일이름중 일부분을 제거하고 싶은 경우
  • 폴더를 삭제하거나 이동하고 싶은 경우
이제부터 그 방법을 알아 보도록 합니다. 아래와 같은 상태입니다. 선택한 파일이나 폴더를 바꾸는 부분은 다른 함수를 사용하시면 됩니다. 아래의 파일은 실제 제가 임시로 보관하고있는것이니 맨 아래에 다시 보여드립니다

word-image-2909-1.png

아래의것은 전체 선택한 파일이나 폴더의 정보를 갖고오는 전체적인 코드를 보여드리면 아래와 같읍니다. 여기에서 가장 중요한 부분은 파일탐색기를 com객체를 이용해서 연결하는 방법을 더 관심두고 봐주시기 바랍니다

shell = win32com.client.Dispatch("Shell.Application")

아래는 전체적인 선택한 부분의 정보를 갖고오는 코드립니다

# -*- coding: utf-8 -*-
import win32com.client

def get_selected_files():
    # Shell.Application COM 객체 생성
    shell = win32com.client.Dispatch("Shell.Application")
    # 현재 열려 있는 탐색기 창 가져오기
    windows = shell.Windows()

    for window in windows:
       # 탐색기 창이 폴더를 표시하는지 확인
       print(window.Name)
       if window.Name in ["Windows 탐색기", "File Explorer", "파일 탐색기"]:
          folder_view = window.Document
          print(folder_view.Selecteditems().Count)
          selected_items = folder_view.Selecteditems()

          # 선택된 파일의 경로 출력
          for item in selected_items:
             print(item.Path)

get_selected_files()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것

word-image-2909-2.png

위의 기본적인 부분에서 몇가지를 추가하고 정리를 하면 좀더 보기 좋은 형태가 됩니다

# -*- coding: utf-8 -*-
import win32com.client

def get_selected_filenames_at_explorer ():
    # Shell.Application COM 객체 생성
    shell = win32com.client.Dispatch("Shell.Application")
    # 현재 열려 있는 탐색기 창 가져오기
    windows = shell.Windows()

    for window in windows:
       # 탐색기 창이 폴더를 표시하는지 확인
       print(window.Name)
       if window.Name in ["Windows 탐색기", "File Explorer", "파일 탐색기"]:
          folder_view = window.Document
          print(folder_view.Selecteditems().Count)
          selected_items = folder_view.Selecteditems()

          # 선택된 파일의 경로 출력
          for item in selected_items:
             print("경로  => ", item.Path)
             print("타입  => ", item.Type)
             print("이름  => ", item.Name)

get_selected_filenames_at_explorer ()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것

위의 코드를 좀 다듬어서 아래의 youtil 모듈의 함수로 만들었습니다. 간단하게 그냥 youtil모듈을 import한후에 탐색기를 킨다음에 함수를 실행하면 그결과로 다음과 같이 나옵니다

# -*- coding: utf-8 -*-
import youtil

xutil = youtil.youtil()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것
l2d = xutil. get_all_selected_file_n_folder_at_explorer()
xutil.print_one_by_one(l2d)

word-image-2909-3.png

이번에는 우리가 원하는 파일을 바꿔보는 것을 보여드립니다

word-image-2909-4.png

먼저 아래의 코드를 사용해서 현재의 선택된 것을 갖고오는 방법을 보여드리면, 아래와 같습니다

# -*- coding: utf-8 -*-
import youtil

xutil = youtil.youtil()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것
l2d = xutil.get_all_selected_file_n_folder_at_explorer()
xutil.print_one_by_one(l2d)

word-image-2909-5.png

이번에는 폴더로 들어온 것의 이름을 바꿔보고, 파일중에 두번째것을 다른이름으로 바꿔보는 것을 보여드립니다

1번째 폴더의 이름을 new_folder_002로 바꿔봅니다

# -*- coding: utf-8 -*-
import youtil

xutil = youtil.youtil()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것
l2d = xutil.get_all_selected_file_n_folder_at_explorer()
xutil.print_one_by_one(l2d)

new_folder_name = "new_folder_002"
path, name = xutil.split_directory_as_path_n_filename(l2d[0]["path"])
print(path, name)
xutil.change_folder_name(l2d[0]["path"], path+"\\"+new_folder_name)

word-image-2909-6.png

두번째로 파일을 바꾸는 부분은 폴더를 바꾸는 것과 같기는 하지만 한번더 해보도록 하면,

# -*- coding: utf-8 -*-
import youtil

xutil = youtil.youtil()
# 파일 탐색기에서 선택한것의 정보를 갖고오는것
l2d = xutil.get_all_selected_file_n_folder_at_explorer()
xutil.print_one_by_one(l2d)

new_file_name = "new_file_222.docx"
path, name = xutil.split_directory_as_path_n_filename(l2d[2]["path"])
print(path, name)
xutil.change_filename(l2d[2]["path"], path+"\\"+new_file_name)

word-image-2909-7.png