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
相关产品推荐
相关产品推荐

