Python移动文件至网络共享文件夹遇[Errno22]无效参数错误求助
问题排查与修复方案
直接错误原因
你遇到的[Errno 22] Invalid argument错误,根源是生成的目标路径混合了Windows UNC路径的反斜杠和正斜杠:\\RAFAEL-DESK\Users\rafa-\Desktop\TesteScript/11.jpg,Windows系统无法识别这种格式的路径。
具体修复步骤
统一路径分隔符,避免混合使用
源路径caminho_origem同时使用了反斜杠和正斜杠,容易导致路径拼接时出现格式混乱。建议改用原始字符串并去掉结尾分隔符,让os.path.join自动处理路径拼接:caminho_origem = r'C:\TesteScript'验证UNC路径的可用性与权限
- 手动在文件资源管理器中打开
\\RAFAEL-DESK\Users\rafa-\Desktop\TesteScript,确认共享文件夹能正常访问,且当前运行Python的用户拥有读写权限。 - 如果访问失败,检查共享设置是否开启、用户权限是否配置正确。
- 手动在文件资源管理器中打开
补全
is_image函数定义
代码中调用了is_image但未给出实现,会触发NameError错误。可以通过检查文件扩展名实现该函数:def is_image(file_path): image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp') return file_path.lower().endswith(image_extensions)优化无限循环逻辑
while True会无间隔持续扫描文件夹,占用CPU资源。建议添加延迟,比如每秒检查一次:import time # ...其他代码... while True: # ...遍历移动文件的代码... time.sleep(1)
修改后的完整代码
import os import shutil import time def is_image(file_path): image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp') return file_path.lower().endswith(image_extensions) # Caminho para o arquivo de origem caminho_origem = r'C:\TesteScript' # Caminho para a pasta de destino compartilhada na rede caminho_destino = r'\\RAFAEL-DESK\Users\rafa-\Desktop\TesteScript' while True: # Lista todos os arquivos na pasta de origem for arquivo in os.listdir(caminho_origem): caminho_arquivo_origem = os.path.join(caminho_origem, arquivo) # Verifica se o caminho é de um arquivo (não é um diretório) if os.path.isfile(caminho_arquivo_origem): if is_image(caminho_arquivo_origem): # Monta o caminho para o arquivo de destino na pasta compartilhada caminho_arquivo_destino = os.path.join(caminho_destino, arquivo) try: # Move o arquivo da pasta de origem para a pasta de destino shutil.move(caminho_arquivo_origem, caminho_arquivo_destino) print(f'Arquivo {arquivo} movido com sucesso para {caminho_destino}') except FileNotFoundError: print(f'O arquivo {arquivo} não foi encontrado.') except PermissionError: print(f'Permissão negada para mover o arquivo {arquivo}.') except Exception as e: print(f"Ocorreu um erro ao mover o arquivo {arquivo}: {str(e)}") time.sleep(1)
额外注意事项
- 如果需要处理大文件,建议添加文件锁定检查,避免移动正在写入的文件。
- 长期运行的话,可以用日志记录替代print输出,方便后续排查问题。
内容的提问来源于stack exchange,提问作者Rafael Ferraria
相关产品推荐
相关产品推荐

