本文目录导读:

我来为您提供一个批量修改文件创建时间的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版本使用,如果遇到问题,请告诉我具体错误信息。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播