You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3拖拽/传参文件时路径变为短文件名问题求助

解决Python脚本接收长文件名变为8.3短格式的问题

问题根源

Windows系统默认对部分驱动器/文件夹开启了8.3短文件名支持,当通过拖拽文件到脚本、传统CMD环境传入参数时,系统可能自动将长路径转换为短格式路径(比如20 ENS 02 0052.pdf变成207D51~1.PDF)。家用电脑可能因系统设置或驱动器格式差异,未触发该转换逻辑。

解决方案

方案1:禁用目标文件夹的短文件名支持(需管理员权限)

打开管理员命令提示符,执行以下命令(替换为你的文件实际存放路径):

fsutil 8dot3name set "C:\Your\Scan\Files\Folder" 1

参数说明:

  • 1:禁用该文件夹的8.3短文件名生成
  • 0:恢复启用(系统默认值)

方案2:在Python脚本中主动将短路径转换为长路径

无需修改系统设置,直接在脚本内处理传入的路径。先安装pywin32库(执行pip install pywin32),再修改代码:

修改后的调试脚本

import sys
import os
import win32api

# 将短路径转换为长路径
long_path = win32api.GetLongPathName(sys.argv[1])
file = os.path.basename(long_path)
print(file)
os.system('pause')

修改后的原脚本片段

import os
import sys
import win32api
import getopt
import sqlite3
from pathlib import Path

for pdf in sys.argv[1:]:
    # 将短路径转换为长路径
    long_pdf_path = win32api.GetLongPathName(pdf)
    # 提取文件名
    file = os.path.basename(long_pdf_path)
    # 移除扩展名(用splitext更稳妥,避免文件名含.时出错)
    filename = os.path.splitext(file)[0]
    # 修复原print格式化错误
    print(f"File: {file}")
    print(f"Filename: {filename}")
    os.system("pause")
    exit()

额外提示

原脚本中的print("File: ".format(file))存在格式化错误,无法正确输出文件名,需改为print("File: {}".format(file))或更简洁的f-string写法print(f"File: {file}")。

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:20:34