解决方案

Python代码实现文件批量移动

读取1.xlsx,

A列存入要移动的文件(不包含扩展名)

B列设置要跳过的文件夹

C列设置要跳过的文件名

D列设置要跳过的关键词,文件名包含这些关键词就跳过

最后输出移动日志

import os
import shutil
import pandas as pd
from datetime import datetime

# 获取当前时间,用于保存结果Excel的文件名
time = str(datetime.now().strftime("%Y%m%d%H%M%S"))
print(time)

# 读取Excel文件
excel_data = pd.read_excel('1.xlsx')
files_to_move = excel_data.iloc[:, 0].dropna().tolist()  # 要移动的文件列表
folders_to_skip = excel_data.iloc[:, 1].dropna().tolist()  # 要跳过的文件夹列表
files_to_keep = excel_data.iloc[:, 2].dropna().tolist()  # 要保留的文件列表
strings_to_keep = excel_data.iloc[:, 3].dropna().tolist()  # 包含这些字符串的文件要保留

# 初始化记录
moved_files = []
skipped_files = []
not_found_files = []


# 移动文件的函数
def move_files(src_folder, dest_folder):
    for root, dirs, files in os.walk(src_folder):
        # 跳过需要跳过的文件夹
        dirs[:] = [d for d in dirs if d not in folders_to_skip]

        for file in files:
            file_name, file_extension = os.path.splitext(file)
            if any(s in file_name for s in strings_to_keep):
                print(f"Skipped due to substring match: {file_name}")
                skipped_files.append(file_name)
                continue

            if file_name in files_to_move and file_name not in files_to_keep:
                src_path = os.path.join(root, file)
                relative_root = os.path.relpath(root, src_folder)
                dest_path = os.path.join(dest_folder, relative_root, file)

                # 确保目标目录存在
                os.makedirs(os.path.join(dest_folder, relative_root), exist_ok=True)

                shutil.move(src_path, dest_path)
                print(f"Moved: {src_path} to {dest_path}")
                moved_files.append(file_name)
            else:
                skipped_files.append(file_name)


# 执行文件移动
move_files(r'F:\备份\桌面\图片迁移\全部图片备份-2023年10月26日 - 副本', r'F:\备份\桌面\图片迁移\迁移到这')

# 记录未找到的文件
not_found_files = list(set(files_to_move) - set(moved_files))

# 导出到Excel
result_df = pd.DataFrame({
    'Moved Files': pd.Series(moved_files),
    'Skipped Files': pd.Series(skipped_files),
    'Not Found Files': pd.Series(not_found_files)
})

# 保存结果到Excel
result_df.to_excel('move_result' + time + '.xlsx', index=False)

print('本次迁移已完成')

发表回复