想抓取影片檔的拍攝日期,之後更改檔名。
但程式跑到rename時直接停住,也沒有跳出錯誤訊息,想請前輩們幫忙看一下是哪裡出錯...
#取得影片檔建立日期(mp4 mov)
import os
import time
import pytz
import datetime
from win32com.propsys import propsys, pscon
movPath = r"D:\test"
for filename in os.listdir(movPath):
old_path = os.path.join(movPath, filename)
properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())
new_name = dt[0:10] + "_" + filename
new_path = os.path.join(movPath, new_name)
print(old_path, " -> " ,new_path)
os.rename(old_path, new_path) ##### 程式到這行不運行,也沒出現錯誤
可能是檔案鎖住了,試試properties用完就刪除它
properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())
del properties
uobik這個方式成功耶!!
想請教,您說"檔案鎖住"是什麼意思呢?
請參考
PyWin32 docs
MS docs (GPS_NO_OPLOCK部分)
使用propsys.SHGetPropertyStoreFromParsingName會鎖定目標檔案(opportunistic locks)
可試試運行原本會卡住的代碼,卡住的當下直接對檔案F2改名也是沒反應的
開個try ... except... 先跳過處理他,稍候再變更名稱
#取得影片檔建立日期(mp4 mov)
import os
import time
import pytz
import datetime
from win32com.propsys import propsys, pscon
movPath = r"D:\test"
for filename in os.listdir(movPath):
old_path = os.path.join(movPath, filename)
properties = propsys.SHGetPropertyStoreFromParsingName(old_path)
dt = str(properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue())
new_name = dt[0:10] + "_" + filename
new_path = os.path.join(movPath, new_name)
print(old_path, " -> " ,new_path)
try :
os.rename(old_path, new_path) ##### 程式到這行不運行,也沒出現錯誤
except Exception as e :
print(f"更名失敗:錯誤內容{e}")