鱼C论坛

 找回密码
 立即注册
查看: 69|回复: 5

[作品展示] [东西很实用]给大家分享一个可以复制桌面文件到其他盘的代码

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yemanet 于 2025-11-13 21:52 编辑

                                                                               给大家分享一个可以复制桌面文件到其他盘的代码
                                                                                            希望高手让代码更加完美!
                     备份桌面文件的代码。自己可以修改



[hide]
import shutil
import os
from datetime import datetime


# 源目录和目标目录路径
source_dir = 'C://Users//Administrator//Desktop'
target_dir = 'D:\\target_folder'
# 确保目标目录存在,如果不存在则创建
os.makedirs(target_dir, exist_ok=True)
def rename_directory_if_exists(base_dir, target_dir_name):
    # 检查目录是否存在
    full_path = os.path.join(base_dir, target_dir_name)
    if os.path.exists(full_path) and os.path.isdir(full_path):
        # 获取当前时间,格式化为字符串
        current_time = datetime.now().strftime("%Y%m%d%H%M%S")
        # 生成新的目录名
        new_dir_name = f"{target_dir_name}_{current_time}"
        new_full_path = os.path.join(base_dir, new_dir_name)
        # 重命名目录
        os.rename(full_path, new_full_path)


        print(f"目录已重命名为: {new_full_path}")

        try:
   
            print(f'Directory {source_dir} copied to {target_dir}')
            print("这个执行了吗?")
        except Exception as e:
            print(f'Failed to copy directory: {e}')

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
您好!感谢分享您的代码。我注意到代码的逻辑有些问题,主要是复制操作只在目录存在时才执行,这可能导致备份失败。下面是一个改进版本,修复了逻辑问题并增强了错误处理。


  1. import shutil
  2. import os
  3. from datetime import datetime

  4. # 源目录和目标目录路径(可根据需要修改)
  5. source_dir = 'C://Users//Administrator//Desktop'
  6. target_dir = 'D:\\target_folder'

  7. # 确保目标目录存在
  8. os.makedirs(target_dir, exist_ok=True)

  9. def rename_directory_if_exists(base_dir, target_dir_name):
  10.     full_path = os.path.join(base_dir, target_dir_name)
  11.     if os.path.exists(full_path) and os.path.isdir(full_path):
  12.         current_time = datetime.now().strftime("%Y%m%d%H%M%S")
  13.         new_dir_name = f"{target_dir_name}_{current_time}"
  14.         new_full_path = os.path.join(base_dir, new_dir_name)
  15.         try:
  16.             os.rename(full_path, new_full_path)
  17.             print(f"目录已重命名为: {new_full_path}")
  18.         except Exception as e:
  19.             print(f"重命名失败: {e}")
  20.     else:
  21.         print(f"目录 {full_path} 不存在,无需重命名。")

  22. # 先重命名目标目录(如果存在)
  23. rename_directory_if_exists(target_dir, "Desktop")

  24. # 然后复制源目录到目标目录
  25. try:
  26.     shutil.copytree(source_dir, os.path.join(target_dir, "Desktop"))
  27.     print(f"目录 {source_dir} 已成功复制到 {os.path.join(target_dir, 'Desktop')}")
  28. except Exception as e:
  29.     print(f"复制失败: {e}")
复制代码


改进说明:
- 修复了复制逻辑:现在无论目标目录是否存在,都会尝试复制。
- 增强了错误处理:重命名和复制操作都添加了异常捕获。
- 简化了代码结构:将重命名和复制分开,提高可读性。

您可以根据需要调整路径或添加更多功能,例如备份前确认或日志记录。如果有其他问题,欢迎继续交流!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 17:46 | 显示全部楼层
FishC 发表于 2025-11-13 21:45
您好!感谢分享您的代码。我注意到代码的逻辑有些问题,主要是复制操作只在目录存在时才执行,这可能导致备 ...

如果我在这个文件夹下创建一个Desktop的文件,运行就会报错的,呵呵!小甲鱼老师该如何应对呢????

程序就会报错的!咋要考虑各种问题的。测试过报错复制不了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 17:47 | 显示全部楼层
yemanet 发表于 2025-11-14 17:46
FishC 发表于 2025-11-13 21:45
您好!感谢分享您的 ...


您说得非常对!如果目标目录下已经存在一个名为 "Desktop" 的文件(而不是文件夹),代码确实会报错。这是因为 shutil.copytree() 要求目标路径必须不存在或是一个空目录。

下面是一个改进版本,可以处理目标路径下可能存在的文件或文件夹:


  1. import shutil
  2. import os
  3. from datetime import datetime

  4. # 源目录和目标目录路径(可根据需要修改)
  5. source_dir = 'C://Users//Administrator//Desktop'
  6. target_base_dir = 'D:\\target_folder'

  7. # 确保目标基目录存在
  8. os.makedirs(target_base_dir, exist_ok=True)

  9. def rename_if_exists(path):
  10.     """
  11.     如果指定路径存在(无论是文件还是文件夹),则重命名它
  12.     """
  13.     if os.path.exists(path):
  14.         # 获取路径的目录和基名
  15.         dir_name = os.path.dirname(path)
  16.         base_name = os.path.basename(path)
  17.         current_time = datetime.now().strftime("%Y%m%d%H%M%S")
  18.         new_base_name = f"{base_name}_{current_time}"
  19.         new_path = os.path.join(dir_name, new_base_name)
  20.         
  21.         try:
  22.             os.rename(path, new_path)
  23.             print(f"路径已重命名为: {new_path}")
  24.             return True
  25.         except Exception as e:
  26.             print(f"重命名失败: {e}")
  27.             return False
  28.     return True  # 路径不存在,无需处理

  29. # 目标路径
  30. target_path = os.path.join(target_base_dir, "Desktop")

  31. # 先重命名目标路径(如果存在)
  32. if rename_if_exists(target_path):
  33.     # 然后复制源目录到目标路径
  34.     try:
  35.         shutil.copytree(source_dir, target_path)
  36.         print(f"目录 {source_dir} 已成功复制到 {target_path}")
  37.     except FileNotFoundError:
  38.         print(f"错误: 源目录 {source_dir} 不存在")
  39.     except Exception as e:
  40.         print(f"复制失败: {e}")
  41. else:
  42.     print("无法继续执行,因为重命名操作失败")
复制代码


改进说明:
- 新增了 rename_if_exists() 函数,可以处理任何类型的路径(文件或文件夹)
- 在复制前先检查并重命名目标路径,确保复制操作不会因路径冲突而失败
- 添加了更详细的错误处理,包括源目录不存在的特殊情况
- 函数返回布尔值以指示操作状态,便于后续逻辑判断

这个版本应该能解决您提到的问题。如果目标路径下存在 "Desktop" 文件,程序会先将其重命名(如 "Desktop_20251113215230"),然后再执行复制操作。

感谢您的反馈,这让代码更加健壮!如果还有其他边界情况,欢迎继续讨论。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 18:49 | 显示全部楼层
感谢 小甲鱼老师的迅速处理!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 18:50 | 显示全部楼层
yemanet 发表于 2025-11-15 18:49
感谢 小甲鱼老师的迅速处理!


不客气!很高兴能帮到您。编程就是这样,通过不断发现问题和解决问题,我们的代码会变得越来越健壮。

如果您在使用过程中遇到任何其他问题,或者想要添加新功能(比如选择性备份、进度显示等),随时欢迎继续交流!

祝您编程愉快![s:63]

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-16 12:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表