如何获取拖放到Python/batch脚本的文件路径并移动文件保留原名称
实现思路与可运行代码
核心逻辑说明
- 拖放路径获取:Windows系统中把文件/文件夹拖放到脚本/批处理图标上时,系统会自动将被拖放对象的绝对路径作为命令行参数传入程序,Python中直接通过
sys.argv即可读取,其中sys.argv[1:]对应所有被拖放的对象路径,支持同时拖放多个。 - 保留原始名称:使用
os.path.basename()提取被移动对象的原始名称,再和预设的目标根路径拼接,即可得到带原始名称的完整目标路径。 - 移动函数选择:
os.replace仅支持同盘符移动,跨盘符场景建议使用兼容性更强的shutil.move,二者调用逻辑基本一致。
完整Python代码示例
import os import sys import shutil # 请修改为你自己的预设目标路径,建议用原始字符串避免转义问题 TARGET_ROOT = r"C:\预设的目标文件夹路径" def main(): # 先判断目标根路径是否存在,不存在则自动创建 if not os.path.exists(TARGET_ROOT): os.makedirs(TARGET_ROOT, exist_ok=True) # 遍历所有被拖放的对象 for src_path in sys.argv[1:]: # 验证源路径是否存在 if not os.path.exists(src_path): print(f"路径不存在,跳过:{src_path}") continue # 提取原始名称 base_name = os.path.basename(src_path) # 拼接得到完整目标路径 dst_path = os.path.join(TARGET_ROOT, base_name) # 可选:如果目标路径已存在的处理逻辑,这里默认覆盖,也可以改成交互确认/跳过 if os.path.exists(dst_path): if os.path.isdir(dst_path): shutil.rmtree(dst_path) else: os.remove(dst_path) # 执行移动 shutil.move(src_path, dst_path) print(f"移动完成:{src_path} -> {dst_path}") if __name__ == "__main__": main()
可选批处理封装(适合Python未加入系统环境变量的场景)
新建一个后缀为.bat的文件,和上述Python脚本放在同一目录,写入以下内容:
@echo off python "%~dp0\你保存的Python脚本文件名.py" %* pause
直接把文件/文件夹拖放到这个bat文件的图标上即可触发移动操作。
内容的提问来源于stack exchange,提问作者Joe Wishman
相关产品推荐
相关产品推荐

