-----------前一阵发现微信接收到的文件默认变成了只读,十分离谱。
让chatgpt给搞一下,下边代码都是chatgpt生成的:
功能是通过注册表获取”Documents“位置,我的电脑是修改过文档位置的。所以获取用户目录的话下边是不存在的,所以通过注册表获取。应该是需要管理员权限。
然后获取wxid开头的所有文件夹中的接收文件的文件夹及其子文件夹。
遍历解除
持续监听,持续监听时发现微信会在文件落地后重命名,所以监听的是文件移动事件,重命名本质上是文件移动。我怕它比微信下手快。所以延迟0.1s修改
想挂后台的就自个搞一下吧。
记得先安装watchdog
over!
----新-----
[Python] 纯文本查看 复制代码import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 获取用户文档路径
import winreg
# 定义 Documents 文件夹的注册表键路径
documents_folder_key_path = r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
# 打开 Documents 文件夹的注册表键
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, documents_folder_key_path) as key:
# 读取 Documents 文件夹的值
user_documents_path, _ = winreg.QueryValueEx(key, "Personal")
user_documents_path = user_documents_path + "\\WeChat Files"
# 输出 Documents 文件夹的位置
print("Documents 文件夹位置:", user_documents_path)
# 获取子文件夹下所有以 "wxid" 开头的文件夹中的 "FileStorage\File" 文件夹
parent_folder = user_documents_path # 根据需求设置父文件夹路径
target_folders = []
for dirpath, dirnames, filenames in os.walk(parent_folder):
for dirname in dirnames:
if dirname.startswith('wxid'):
target_folder = os.path.join(dirpath, dirname, 'FileStorage\\File')
if os.path.exists(target_folder):
target_folders.append(target_folder)
print('目标文件夹列表:', target_folders)
# 解除目标文件夹及其子文件夹下所有文件的只读状态
for target_folder in target_folders:
for dirpath, dirnames, filenames in os.walk(target_folder):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
os.chmod(file_path, 0o777) # 解除文件只读状态
print('解除只读状态:', file_path)
# 监听目标文件夹及其子文件夹下新增文件,并解除只读状态
class FileEventHandler(FileSystemEventHandler):
def on_moved(self, event):
if event.is_directory:
return
time.sleep(0.1)
file_path = event.dest_path
os.chmod(file_path, 0o777) # 解除新增文件的只读状态
print('解除新增文件只读状态:', file_path)
event_handler = FileEventHandler()
observer = Observer()
for target_folder in target_folders:
observer.schedule(event_handler, path=target_folder, recursive=True)
observer.start()
print('开始监听文件夹...')
# 程序保持运行状态,等待事件的发生
try:
while observer.is_alive():
observer.join(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
----旧-----
[Python] 纯文本查看 复制代码import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 获取用户文档路径
import winreg
# 定义 Documents 文件夹的注册表键路径
documents_folder_key_path = r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
# 打开 Documents 文件夹的注册表键
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, documents_folder_key_path) as key:
# 读取 Documents 文件夹的值
user_documents_path, _ = winreg.QueryValueEx(key, "Personal")
user_documents_path = user_documents_path + "\\WeChat Files"
# 输出 Documents 文件夹的位置
print("Documents 文件夹位置:", user_documents_path)
# 获取子文件夹下所有以 "wxid" 开头的文件夹中的 "FileStorage\File" 文件夹
parent_folder = user_documents_path # 根据需求设置父文件夹路径
target_folders = []
for dirpath, dirnames, filenames in os.walk(parent_folder):
for dirname in dirnames:
if dirname.startswith('wxid'):
target_folder = os.path.join(dirpath, dirname, 'FileStorage\\File')
if os.path.exists(target_folder):
target_folders.append(target_folder)
print('目标文件夹列表:', target_folders)
# 解除目标文件夹及其子文件夹下所有文件的只读状态
for target_folder in target_folders:
for dirpath, dirnames, filenames in os.walk(target_folder):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
os.chmod(file_path, 0o777) # 解除文件只读状态
print('解除只读状态:', file_path)
# 监听目标文件夹及其子文件夹下新增文件,并解除只读状态
class FileEventHandler(FileSystemEventHandler):
def on_moved(self, event):
if event.is_directory:
return
time.sleep(0.1)
file_path = event.dest_path
os.chmod(file_path, 0o777) # 解除新增文件的只读状态
print('解除新增文件只读状态:', file_path)
event_handler = FileEventHandler()
observer = Observer()
for target_folder in target_folders:
observer.schedule(event_handler, path=target_folder, recursive=True)
observer.start()
print('开始监听文件夹...')
# 程序保持运行状态,等待事件的发生
try:
while True:
pass
except KeyboardInterrupt:
observer.stop()
observer.join()