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

求助:如何按文件名前缀匹配将文件复制到对应文件夹

解决文件名提取首词并匹配文件夹的问题

没问题!提取文件名里的首词(下划线分割的第一个部分)其实很简单,不管你用Python脚本还是命令行都能轻松搞定,我给你几个实用的方案:

方案一:Python 脚本(跨平台通用)

这个方法适合需要灵活扩展逻辑的场景,Windows、Linux、macOS都能兼容:

import os
import shutil

# 替换成你的实际路径
source_dir = "./your_files"  # 存放Long_John_Silver.txt这类文件的目录
root_folder_dir = "./target_folders"  # 包含Long、Miss、Master等文件夹的根目录

# 遍历源目录下的所有文件
for filename in os.listdir(source_dir):
    file_path = os.path.join(source_dir, filename)
    # 只处理文件,跳过子文件夹
    if not os.path.isfile(file_path):
        continue
    
    # 核心步骤:提取首词作为文件夹名
    # 1. 去掉文件后缀(比如.txt)
    name_without_ext = os.path.splitext(filename)[0]
    # 2. 按下划线分割字符串,取第一个部分
    target_folder_name = name_without_ext.split("_")[0]
    
    # 构建目标文件夹的完整路径
    target_folder_path = os.path.join(root_folder_dir, target_folder_name)
    
    # 检查目标文件夹是否存在,存在则复制文件
    if os.path.exists(target_folder_path):
        shutil.copy2(file_path, target_folder_path)
        print(f"✅ 已复制 {filename} 到 {target_folder_name} 文件夹")
    else:
        print(f"⚠️ 警告:{target_folder_name} 文件夹不存在,跳过 {filename}")

关键代码说明:

  • os.path.splitext(filename)[0]:将文件名和后缀分离,比如Long_John_Silver.txt会变成Long_John_Silver
  • name_without_ext.split("_")[0]:按下划线分割字符串,直接取第一个元素,也就是目标文件夹名
  • shutil.copy2:相比普通的copy,会保留文件的创建时间、修改时间等元数据,更贴心

方案二:命令行工具(快速无需编程)

如果你不想写脚本,用系统自带的命令行工具也能完成任务:

Windows 命令提示符(CMD)

把下面的代码保存成copy_files.bat,替换路径后双击运行即可:

@echo off
setlocal enabledelayedexpansion

:: 替换成你的实际路径
set "SOURCE_DIR=C:\path\to\your\files"
set "ROOT_FOLDER_DIR=C:\path\to\target\folders"

for %%f in ("%SOURCE_DIR%\*.txt") do (
    :: 获取不带后缀的文件名
    set "FILE_NAME=%%~nf"
    :: 提取下划线前的首词作为文件夹名
    for /f "delims=_" %%a in ("!FILE_NAME!") do set "TARGET_FOLDER=%%a"
    
    if exist "%ROOT_FOLDER_DIR%\!TARGET_FOLDER!\" (
        copy "%%f" "%ROOT_FOLDER_DIR%\!TARGET_FOLDER!\"
        echo 已复制 %%~nxf 到 !TARGET_FOLDER! 文件夹
    ) else (
        echo 警告:!TARGET_FOLDER! 文件夹不存在,跳过 %%~nxf
    )
)
pause

Linux/macOS Bash 脚本

保存成copy_files.sh,执行chmod +x copy_files.sh给脚本加权限后运行:

#!/bin/bash

# 替换成你的实际路径
SOURCE_DIR="./path/to/your/files"
ROOT_FOLDER_DIR="./path/to/target/folders"

for file in "$SOURCE_DIR"/*.txt; do
    # 跳过非文件(比如没有匹配到txt文件的情况)
    [ -f "$file" ] || continue
    
    # 获取不带后缀的文件名
    FILE_NAME=$(basename "$file" .txt)
    # 提取下划线前的首词
    TARGET_FOLDER="${FILE_NAME%%_*}"
    
    if [ -d "$ROOT_FOLDER_DIR/$TARGET_FOLDER" ]; then
        cp "$file" "$ROOT_FOLDER_DIR/$TARGET_FOLDER/"
        echo "✅ 已复制 $(basename "$file") 到 $TARGET_FOLDER 文件夹"
    else
        echo "⚠️ 警告:$TARGET_FOLDER 文件夹不存在,跳过 $(basename "$file")"
    fi
done

命令行关键逻辑:

  • Windows 中用for /f "delims=_"指定下划线为分隔符,直接取第一个字段作为文件夹名
  • Bash 中用${FILE_NAME%%_*}:这是参数扩展语法,删除从最后一个下划线开始的所有内容,快速得到首词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:19:28