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

如何获取拖放到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03