刷新文件修改时间
cmd刷新文件修改时间 powershell刷新文件修改时间
做一个 怎么对当前文件夹的所有文件 右键编辑或者记事本打开 然后crtl+s保存的操作,目的是刷新文件修改时间
使用一个批处理脚本或者 PowerShell 脚本来完成此任务。以下是两种方法,它们的目标是通过模拟打开文件并按下 Ctrl + S 来触发文件的修改时间更新。
文件夹的时间是通过复制移动来完成的
方法 1: 使用批处理脚本(.bat 文件)
通过创建一个批处理文件,批量对文件夹中的所有文件进行操作,模拟打开和保存。这可以通过启动记事本程序并自动打开文件来实现,然后保存文件。
步骤:
- 创建一个新的批处理文件(例如
RefreshFileTimestamps.bat)。 - 将以下代码复制到批处理文件中:
batch@echo off
for /r %%f in (*.*) do (
echo Opening %%f...
start /wait notepad.exe %%f
timeout /t 1 > nul
)
echo All files have been opened and closed (saved).
pause
解释:
for /r %%f in (*.*):遍历当前文件夹及其子文件夹中的所有文件。start /wait notepad.exe %%f:使用记事本打开文件并等待记事本关闭。timeout /t 1:等候 1 秒钟,确保文件被完全加载。pause:在执行完所有操作后,显示 "All files have been opened and closed (saved)"。
注意:
- 该批处理脚本会打开文件,并且在记事本中手动按
Ctrl + S保存文件时会更新文件的修改时间(但是记事本默认没有做任何修改,所以文件内容不会更改)。只要记事本关闭,修改时间就会被更新。
如果要避免手动按
Ctrl + S,你需要考虑其他方法,例如使用自动化工具模拟按键。
方法 2: 使用 PowerShell 脚本
PowerShell 脚本提供了更强大的自动化控制,特别是在不依赖 GUI 的情况下。你可以利用 PowerShell 来直接更新文件的修改时间。
步骤:
- 创建一个新的 PowerShell 脚本(例如
RefreshFileTimestamps.ps1)。 - 将以下代码复制到 PowerShell 文件中:
powershell# 获取当前文件夹下的所有文件
$folderPath = Get-Location
$files = Get-ChildItem -Path $folderPath -File -Recurse
# 遍历每个文件,更新其修改时间
foreach ($file in $files) {
$currentTime = Get-Date
# 修改文件的最后修改时间为当前时间
Set-ItemProperty -Path $file.FullName -Name LastWriteTime -Value $currentTime
Write-Host "Updated timestamp for $($file.FullName)"
}
Write-Host "All file timestamps have been updated."
解释:
Get-ChildItem -Path $folderPath -File -Recurse:获取当前文件夹及其子文件夹中的所有文件。Set-ItemProperty:通过将文件的LastWriteTime设置为当前时间来更新文件的修改时间。Write-Host:输出哪些文件的时间戳已经被更新。
运行脚本:
- 以管理员身份启动 PowerShell。
- 导航到你脚本所在的文件夹。
- 运行 PowerShell 脚本:
powershell
.\RefreshFileTimestamps.ps1
注意:
- 该脚本直接更新文件的修改时间,不会改变文件内容。它通过
Set-ItemProperty来修改文件的LastWriteTime属性,从而实现刷新文件修改时间的效果。
方法 3: 使用 AutoHotkey 脚本(模拟键盘输入)
如果你希望模拟 Ctrl + S 快捷键来保存文件而不使用记事本的手动操作,可以考虑使用 AutoHotkey 脚本。AutoHotkey 是一个强大的自动化工具,可以用来模拟键盘、鼠标等操作。
步骤:
- 安装 AutoHotkey(如果尚未安装)。
- 访问 AutoHotkey 官网 下载并安装。
- 创建 AutoHotkey 脚本(例如
RefreshFileTimestamps.ahk)。 - 将以下内容复制到脚本中:
autohotkeyLoop, Files, *.*, R ; 遍历当前文件夹及子文件夹中的所有文件
{
Run, notepad.exe %A_LoopFileFullPath% ; 启动记事本并打开文件
WinWaitActive, ahk_class Notepad ; 等待记事本窗口激活
Send, ^s ; 模拟 Ctrl + S 保存文件
Sleep, 500 ; 等待 500ms,确保文件保存
WinClose, ahk_class Notepad ; 关闭记事本
}
MsgBox, All files have been saved and timestamps updated.
解释:
Loop, Files, *.*, R:递归遍历当前文件夹及其子文件夹中的所有文件。Run, notepad.exe %A_LoopFileFullPath%:打开文件并启动记事本。Send, ^s:模拟按下Ctrl + S(即保存文件)。WinClose, ahk_class Notepad:关闭记事本窗口。
运行脚本:
- 双击
RefreshFileTimestamps.ahk脚本文件。 - AutoHotkey 将自动打开文件,模拟
Ctrl + S保存文件,并更新文件的修改时间。
总结:
- 批处理脚本:通过打开文件并等待记事本关闭来刷新修改时间。
- PowerShell 脚本:直接更新文件的修改时间,不依赖于打开文件,效率较高。
- AutoHotkey 脚本:通过模拟
Ctrl + S保存文件来更新修改时间,适合对文件进行操作时有实际保存动作的场景。
根据你的需求选择最合适的方案。如果你不想依赖图形界面操作,推荐使用 PowerShell 或批处理脚本,它们都能高效地完成任务。
测试预览
直接用记事本打开并保存可能会对某些类型的文件造成破坏,特别是二进制文件。对于文本文件来说,这种方法是可行的,但对于其他类型的文件,推荐使用更安全的方式更新时间戳,比如使用touch命令或者特定的脚本来仅改变文件的时间属性而不更改其内容。
使用PowerShell脚本批量刷新文件修改时间 单个文件夹修改
# 获取当前目录下所有文件
$files = Get-ChildItem -Path . -File
foreach ($file in $files) {
# 更新每个文件的最后写入时间
(Get-Item $file.FullName).LastWriteTime = Get-Date
}
如果遇到目录,也要继续循环操作
# 获取当前目录下所有文件,包括子目录中的文件
$files = Get-ChildItem -Path . -Recurse -File
foreach ($file in $files) {
# 更新每个文件的最后写入时间
(Get-Item $file.FullName).LastWriteTime = Get-Date
}
如果在win11 使用powershell报错
.\目录修改.ps1 : 无法加载文件 C:\Users\kamo\Desktop\图书管理系统设计与开发\DBConnection\目录修改.ps1,因为在此系统上 禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + .\目录修改.ps1 + ~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
你遇到的错误是因为PowerShell默认的安全策略(执行策略,Execution Policy)阻止了脚本的运行。为了运行你的脚本,你需要临时更改PowerShell的执行策略。请按照以下步骤操作:
临时更改PowerShell执行策略
以管理员身份打开PowerShell:
- 按
Win + X键,然后选择Windows PowerShell (管理员)或者在开始菜单中搜索PowerShell,右键点击并选择“以管理员身份运行”。
- 按
检查当前的执行策略:
在管理员PowerShell窗口中输入以下命令来查看当前的执行策略:
powershell浅色版本
Get-ExecutionPolicy
设置为允许本地脚本运行:
输入以下命令将执行策略设置为允许运行本地编写的脚本,但仍然阻止从互联网下载的脚本(除非它们被标记为可信)。这是相对安全的选择。
powershell浅色版本
Set-ExecutionPolicy RemoteSigned系统可能会提示你确认更改,输入
Y或者A来同意。
运行你的脚本:
现在你可以尝试再次运行你的脚本,使用如下命令:
powershell浅色版本
.\目录修改.ps1
恢复默认执行策略(可选):
如果你想要在完成任务后恢复到更严格的执行策略,可以使用以下命令:
powershell浅色版本
Set-ExecutionPolicy Restricted
注意事项
安全性考虑:更改执行策略可能带来安全风险,请确保你信任你要运行的脚本。
RemoteSigned是一个折中的选项,它允许运行本地编写的脚本而不影响来自网络的脚本的安全性。系统范围的影响
:上述更改会影响整个系统的PowerShell执行策略。如果你只希望临时改变策略来运行一次脚本,可以在运行脚本时直接指定执行策略,例如:
powershell浅色版本
powershell -ExecutionPolicy Bypass -File .\目录修改.ps1这种方式不会永久更改系统的执行策略。
通过以上步骤,你应该能够成功运行你的PowerShell脚本,并且递归地更新文件夹及其子文件夹中所有文件的时间戳