windows系统下利用python对指定文件夹下面的所有文件的创建时间进行修改
不知道其他的朋友们有没有这个需求哈,反正咱家是有这个需求
需求1、当前有大量的文件需要更改文件生成的时间,因为不可告知的原因,当前的文件创建时间是不能满足使用的
需求2、更改后的时间不能是一样的,不能被看出来是文件是一起保存的,也就是说看着像是每个文件单独报错的(创建时间不一致)
看需求只有一个是不是非常的简单,但是吧。利用python来实现起来也是非常简单的,如果不信的话,大家可以跟着小编的文章往下面看哈,简单易学,一学就会,相信小编也是相信自己哈
基础环境
主机版本 | python版本 |
---|---|
win10系统 | python3.8.6 |
先来看看效果
一看效果大家就知道,小编的这个文章是实现的一个什么的功能了
小编这里只是修改了 分钟和秒的时间变得随机了,看着就不像是作假的拉,当然了,代码里面可以进行更改的,大家想更改那个时间可以更改那个时间,比如改年,月,日,时,都可以。小编这里只是提供了一个大概的思路而已,文章最后有完整的代码。
当前有这么的一个文件夹,下面有好多的好多的文件,当然了,小编这边是整理了几个测试专用的文件,文件不是很多,但是也是把各种格式的文件都是整理了一下
开始运行下代码:
查看文件创建时间修改结果:
人狠话不多,直接开始搞
先import我们需要的几个包
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random ###产生随机数的,方便咱们文件的创建时间达到不一致的效果
import tkinter as tk ###作用与UI界面的
import os #####作用与当前的额winows系统的,比如文件的打开关闭,当前的路径等需要这个模块
###下面的两个就是用来修改时间用的,比较关键的
from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle
from win32file import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING
###下面的都是时间的模块,当然了可能有人说为什么使用这么多的模块,小编只是懒,怎么方便怎么用,大家可以研究下减少模块来实现
from pywintypes import Time
import time
import datetime
创建UI操作窗口,看起来更逼真
小编的这个窗口还是比较简单的,大家可以根据自己的需要定制一个自己的窗口
root = tk.Tk() # 创建窗口对象
root.title("指定目录下文件时间批量修改 -----文件辅助程序 v2.10 ")
root.geometry("550x300")
·
·
·
·
中间内容下面补充
·
·
·
·
# 显示当前进行的操作,以及提示
####会在窗口出现一个白板,来显示我们运行的结果
jg = tk.LabelFrame(root,text="当前进展展示",padx=5,pady=5)
jg.grid(row=0,columnspan=2,sticky='w',padx=10,pady=10)
text=tk.Text(jg,width=70,height=15)
scroll=tk.Scrollbar(jg)
scroll.grid(row=0,column=1)
text.grid(row=0,column=0)
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
tk.Button(root, text="文件时间修改", width=25, command=Start).grid(row=1,columnspan=2,padx=10, pady=10) # s南边也就是下边
###点击文件时间修改按钮,会出发Start这个函数,接下来我们就补充这个函数
root.mainloop() # 进入消息循环
效果:
Start函数的编写
def Start():
#获取当天日期
TIME = datetime.datetime.now()
"""
定义当前的时间并获取当前的时间
:year #当前年份,如果有自己的需求,这里可以进行更改,eg year=2023
:month ###当前月,如果有自己的需求,这里可以进行更改
:day ###当前天,如果有自己的需求,这里可以进行更改
:hour ####当前时,r如果有自己的需求,这里可以进行更改
"""
year = int(TIME.strftime("%Y"))
month = int(TIME.strftime("%m"))
day = int(TIME.strftime("%d"))
hour = int(TIME.strftime("%H"))
####白板展示,可以写成一个函数,但是小编没写,总共用不了几下
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, "当前时间已经生成。。。。。。。。")
####需要更改文件所在的目录
path = "D:\\wenjian" ###根据自己的实际位置进行更改
####白板展示
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, "正在处理文件,请稍等。。。。。。。。")
# findfile(path)
###批量更改文件时间
"""
将year,month,day,hour,path传递给fileChangTime函数,执行具体的文件创建日期的修改
"""
fileChansTime(year,month,day,hour,path)
fileChansTime函数的编写
def fileChansTime(year,month,day,hour,path):
####循环path这个文件夹下面的所有文件
file_list = os.listdir(path)
for file_name in file_list:
###调用分钟和秒函数,来随机生成分钟和秒,并赋值
minute = Minute()
second = Second()
##修改文件创建时间
o = str(year) +"-" + str(month) + "-" + str(day) +" " + str(hour) + ":" + str(minute) + ":" + str(second)
###小编这里将创建时间、修改时间和访问时间都设置成一样的拉,可以根据自己的需要设置成不一样
cTime = o # 创建时间
mTime = o # 修改时间
aTime = o # 访问时间
offset = (0, 10, 30) # 偏移的秒数
# 拼接文件路径,文件存在才能成功(可以写绝对路径,也可以写相对路径,小编这里是绝对路径)
A = path + "\\" + file_name
# 调用modifyFileTime函数(文章下面有)修改文件创建时间,并判断是否修改成功
r = modifyFileTime(A, cTime, mTime, aTime, offset)
if r == 0:
print('修改完成')
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, file_name+"编辑时间的随机分钟和秒数已经更改成功")
elif r == 1:
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, file_name+"编辑时间的随机分钟和秒数更改失败,请手动更改")
分钟和秒的函数的编写
这里可以写成一个函数来达到效果,小编这里是写了两个,但是不影响效果
如果大家需要更改年,月,日,时的随机值的话,可以参照这个办法进行定义一下,并在Start函数中进行调用就行
##取分钟的随机数
def Minute():
# 从1到60之间取一个随机数
value = (random.uniform(1, 60))
# .0代表后面的小数位为0个
value = format(value, '.0f')
return value
##取描述的随机值
def Second():
# 从1到60之间取一个随机数
value = (random.uniform(1, 60))
# .0代表后面的小数位为0个
value = format(value, '.0f')
return value
modifyFileTime函数的编写
##修改文件日期
def modifyFileTime(filePath, createTime, modifyTime, accessTime, offset):
"""
用来修改任意文件的相关时间属性,时间格式:YYYY-MM-DD HH:MM:SS 例如:2019-02-02 00:01:02
:param filePath: 文件路径名
:param createTime: 创建时间
:param modifyTime: 修改时间
:param accessTime: 访问时间
:param offset: 时间偏移的秒数,tuple格式,顺序和参数时间对应
"""
try:
format = "%Y-%m-%d %H:%M:%S" # 时间格式
cTime_t = timeOffsetAndStruct(createTime, format, offset[0])
mTime_t = timeOffsetAndStruct(modifyTime, format, offset[1])
aTime_t = timeOffsetAndStruct(accessTime, format, offset[2])
fh = CreateFile(filePath, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
createTimes, accessTimes, modifyTimes = GetFileTime(fh)
createTimes = Time(time.mktime(cTime_t))
accessTimes = Time(time.mktime(aTime_t))
modifyTimes = Time(time.mktime(mTime_t))
SetFileTime(fh, createTimes, accessTimes, modifyTimes)
CloseHandle(fh)
return 0
except:
return 1
def timeOffsetAndStruct(times, format, offset):
return time.localtime(time.mktime(time.strptime(times, format)) + offset)
来看看整体的代码效果
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import tkinter as tk
import os
from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle
from win32file import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING
from pywintypes import Time
import time
import datetime
root = tk.Tk() # 创建窗口对象
root.title("指定目录下文件时间批量修改 -----文件辅助程序 v2.10 ")
root.geometry("550x300")
##修改文件日期
def modifyFileTime(filePath, createTime, modifyTime, accessTime, offset):
"""
用来修改任意文件的相关时间属性,时间格式:YYYY-MM-DD HH:MM:SS 例如:2019-02-02 00:01:02
:param filePath: 文件路径名
:param createTime: 创建时间
:param modifyTime: 修改时间
:param accessTime: 访问时间
:param offset: 时间偏移的秒数,tuple格式,顺序和参数时间对应
"""
try:
format = "%Y-%m-%d %H:%M:%S" # 时间格式
cTime_t = timeOffsetAndStruct(createTime, format, offset[0])
mTime_t = timeOffsetAndStruct(modifyTime, format, offset[1])
aTime_t = timeOffsetAndStruct(accessTime, format, offset[2])
fh = CreateFile(filePath, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
createTimes, accessTimes, modifyTimes = GetFileTime(fh)
createTimes = Time(time.mktime(cTime_t))
accessTimes = Time(time.mktime(aTime_t))
modifyTimes = Time(time.mktime(mTime_t))
SetFileTime(fh, createTimes, accessTimes, modifyTimes)
CloseHandle(fh)
return 0
except:
return 1
def timeOffsetAndStruct(times, format, offset):
return time.localtime(time.mktime(time.strptime(times, format)) + offset)
##取分钟的随机数
def Minute():
# 从1到60之间取一个随机数
value = (random.uniform(1, 60))
# .0代表后面的小数位为0个
value = format(value, '.0f')
return value
##取描述的随机值
def Second():
# 从1到60之间取一个随机数
value = (random.uniform(1, 60))
# .0代表后面的小数位为0个
value = format(value, '.0f')
return value
def fileChansTime(year,month,day,hour,path):
####循环
file_list = os.listdir(path)
for file_name in file_list:
print(file_name)
minute = Minute()
second = Second()
##修改文件创建时间
o = str(year) +"-" + str(month) + "-" + str(day) +" " + str(hour) + ":" + str(minute) + ":" + str(second)
cTime = o # 创建时间
mTime = o # 修改时间
aTime = o # 访问时间
# 文件路径,文件存在才能成功(可以写绝对路径,也可以写相对路径)
offset = (0, 10, 30) # 偏移的秒数
A = path + "\\" + file_name
print(A)
# 调用函数修改文件创建时间,并判断是否修改成功
r = modifyFileTime(A, cTime, mTime, aTime, offset)
if r == 0:
print('修改完成')
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, file_name+"编辑时间的随机分钟和秒数已经更改成功")
elif r == 1:
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, file_name+"编辑时间的随机分钟和秒数更改失败,请手动更改")
def Start():
#获取当天日期
TIME = datetime.datetime.now()
year = int(TIME.strftime("%Y")) #当前年份
month = int(TIME.strftime("%m")) ###当前月
day = int(TIME.strftime("%d")) ###当前天
hour = int(TIME.strftime("%H")) ####当前时
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, "当前时间已经生成。。。。。。。。")
####模板目录
path = "D:\\wenjian"
####循环文件,并进行批量更改
text.insert(tk.INSERT, '\n')
text.insert(tk.INSERT, "正在处理文件,请稍等。。。。。。。。")
# findfile(path)
###批量更改
fileChansTime(year,month,day,hour,path)
# 显示当前进行的操作,以及提示
jg = tk.LabelFrame(root,text="当前进展展示",padx=5,pady=5)
jg.grid(row=0,columnspan=2,sticky='w',padx=10,pady=10)
text=tk.Text(jg,width=70,height=15)
scroll=tk.Scrollbar(jg)
scroll.grid(row=0,column=1)
text.grid(row=0,column=0)
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
tk.Button(root, text="文件时间修改", width=25, command=Start).grid(row=1,columnspan=2,padx=10, pady=10) # s南边也就是下边
root.mainloop() # 进入消息循环
结束语
工作上终于不是那么忙了,以后有时间写自己的博客了,自己也是看到需要什么就写什么,希望可以帮助到大家,再次感谢大家的阅读,谢谢。