本文目录导读:

我来为您提供一个批量修改文件创建时间的Python脚本,支持多种修改方式:
Python脚本(适用于Windows)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量修改文件创建时间脚本
支持Windows系统(创建时间仅在Windows有效)
"""
import os
import sys
import argparse
from datetime import datetime
import win32file
import win32con
import pywintypes
def modify_file_time(file_path, create_time, modify_time=None, access_time=None):
"""
修改文件的创建、修改和访问时间
参数:
file_path: 文件路径
create_time: 创建时间 (datetime对象)
modify_time: 修改时间 (datetime对象, 可选)
access_time: 访问时间 (datetime对象, 可选)
"""
try:
# 转换为Windows时间格式
if create_time:
create_win = pywintypes.Time(create_time)
else:
create_win = None
if modify_time:
modify_win = pywintypes.Time(modify_time)
else:
modify_win = None
if access_time:
access_win = pywintypes.Time(access_time)
else:
access_win = None
# 打开文件
handle = win32file.CreateFile(
file_path,
win32con.GENERIC_WRITE,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_ATTRIBUTE_NORMAL,
None
)
# 修改时间
win32file.SetFileTime(handle, create_win, access_win, modify_win)
handle.close()
return True
except Exception as e:
print(f"错误: 修改 {file_path} 失败 - {str(e)}")
return False
def batch_modify(directory, create_date=None, modify_date=None,
access_date=None, extension="*", recursive=False):
"""批量修改文件时间"""
# 构建文件搜索模式
if extension == "*":
pattern = "*"
else:
if not extension.startswith("."):
extension = "." + extension
pattern = f"*{extension}"
# 获取文件列表
file_list = []
if recursive:
for root, dirs, files in os.walk(directory):
for file in files:
if pattern == "*" or file.endswith(pattern):
file_list.append(os.path.join(root, file))
else:
for file in os.listdir(directory):
if pattern == "*" or file.endswith(pattern):
file_path = os.path.join(directory, file)
if os.path.isfile(file_path):
file_list.append(file_path)
if not file_list:
print("未找到符合条件的文件")
return
# 批量修改
success_count = 0
print(f"找到 {len(file_list)} 个文件,开始修改...")
for i, file_path in enumerate(file_list, 1):
print(f"处理 [{i}/{len(file_list)}]: {file_path}")
if modify_file_time(file_path, create_date, modify_date, access_date):
success_count += 1
print(f"\n完成! 成功修改 {success_count}/{len(file_list)} 个文件")
def parse_date(date_str):
"""解析日期字符串为datetime对象"""
if not date_str:
return None
try:
# 支持多种日期格式
formats = [
"%Y-%m-%d %H:%M:%S",
"%Y-%m-%d %H:%M",
"%Y-%m-%d",
"%Y/%m/%d %H:%M:%S",
"%Y/%m/%d %H:%M",
"%Y/%m/%d"
]
for fmt in formats:
try:
return datetime.strptime(date_str, fmt)
except ValueError:
continue
raise ValueError(f"无法解析日期: {date_str}")
except Exception as e:
print(f"日期格式错误: {e}")
sys.exit(1)
def main():
parser = argparse.ArgumentParser(description='批量修改文件创建时间')
parser.add_argument('directory', help='目标目录路径')
# 时间参数组
time_group = parser.add_mutually_exclusive_group(required=True)
time_group.add_argument('--create', help='设置创建时间,格式: YYYY-MM-DD HH:MM:SS')
time_group.add_argument('--offset', type=float, help='以分钟为单位偏移当前时间(正数推迟,负数提前)')
# 其他参数
parser.add_argument('--modify', help='设置修改时间(可选)')
parser.add_argument('--access', help='设置访问时间(可选)')
parser.add_argument('--ext', default='*', help='文件后缀过滤, --ext .txt 或 --ext txt')
parser.add_argument('-r', '--recursive', action='store_true', help='递归处理子目录')
args = parser.parse_args()
# 解析时间参数
if args.create:
create_time = parse_date(args.create)
elif args.offset:
from datetime import timedelta
create_time = datetime.now() + timedelta(minutes=args.offset)
else:
create_time = None
# 可选修改其他时间
if args.modify:
modify_time = parse_date(args.modify)
else:
modify_time = create_time # 不指定时使用创建时间
if args.access:
access_time = parse_date(args.access)
else:
access_time = create_time # 不指定时使用创建时间
# 验证目录存在
if not os.path.isdir(args.directory):
print(f"错误: 目录不存在 - {args.directory}")
sys.exit(1)
# 执行批量修改
batch_modify(
args.directory,
create_time=create_time,
modify_time=modify_time,
access_time=access_time,
extension=args.ext,
recursive=args.recursive
)
if __name__ == "__main__":
# 检查依赖
try:
import win32file
import win32con
import pywintypes
except ImportError:
print("请先安装 pywin32: pip install pywin32")
sys.exit(1)
main()
使用方法
安装依赖
pip install pywin32
基本用法
# 设置特定时间 python modify_time.py "D:\文件夹" --create "2023-01-15 10:30:00" # 设置相对时间(提前3小时) python modify_time.py "D:\文件夹" --offset -180 # 设置特定后缀的文件 python modify_time.py "D:\文件夹" --create "2023-01-15" --ext .jpg # 递归处理子文件夹 python modify_time.py "D:\文件夹" --create "2023-01-15" -r # 同时修改创建和修改时间 python modify_time.py "D:\文件夹" --create "2023-01-15" --modify "2023-02-20"
备用方案:使用PowerShell脚本
# batch_modify_time.ps1
param(
[string]$Directory,
[string]$DateTime = "2023-01-15 10:30:00",
[string]$Extension = "*",
[switch]$Recursive
)
# 创建目标时间
$targetTime = [datetime]::ParseExact($DateTime, "yyyy-MM-dd HH:mm:ss", $null)
# 获取文件列表
if ($Recursive) {
$files = Get-ChildItem -Path $Directory -Filter "*$Extension" -Recurse -File
} else {
$files = Get-ChildItem -Path $Directory -Filter "*$Extension" -File
}
foreach ($file in $files) {
Write-Host "处理: $($file.FullName)"
try {
# 修改创建时间
$file.CreationTime = $targetTime
# 修改修改时间
$file.LastWriteTime = $targetTime
# 修改访问时间
$file.LastAccessTime = $targetTime
$file.Refresh()
Write-Host " ✓ 成功" -ForegroundColor Green
}
catch {
Write-Host " ✗ 失败: $_" -ForegroundColor Red
}
}
Write-Host "`n完成!共处理 $($files.Count) 个文件"
PowerShell使用示例
# 设置特定时间 .\batch_modify_time.ps1 -Directory "D:\文件夹" -DateTime "2023-01-15 10:30:00" # 只处理txt文件 .\batch_modify_time.ps1 -Directory "D:\文件夹" -DateTime "2023-01-15" -Extension "*.txt" # 递归处理 .\batch_modify_time.ps1 -Directory "D:\文件夹" -DateTime "2023-01-15" -Recursive
注意事项
- Windows权限:修改文件时间可能需要管理员权限
- NTFS文件系统:创建时间仅在NTFS文件系统上有效
- 系统保护文件:某些系统文件可能无法修改
- 建议备份:批量操作前建议备份重要文件
您可以根据需要选择Python或PowerShell版本使用,如果遇到问题,请告诉我具体错误信息。