刷新文件修改时间

cmd刷新文件修改时间 powershell刷新文件修改时间

做一个 怎么对当前文件夹的所有文件 右键编辑或者记事本打开 然后crtl+s保存的操作,目的是刷新文件修改时间

使用一个批处理脚本或者 PowerShell 脚本来完成此任务。以下是两种方法,它们的目标是通过模拟打开文件并按下 Ctrl + S 来触发文件的修改时间更新。

文件夹的时间是通过复制移动来完成的

方法 1: 使用批处理脚本(.bat 文件)

通过创建一个批处理文件,批量对文件夹中的所有文件进行操作,模拟打开和保存。这可以通过启动记事本程序并自动打开文件来实现,然后保存文件。

步骤:

  1. 创建一个新的批处理文件(例如 RefreshFileTimestamps.bat)。
  2. 将以下代码复制到批处理文件中:
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 来直接更新文件的修改时间。

步骤:

  1. 创建一个新的 PowerShell 脚本(例如 RefreshFileTimestamps.ps1)。
  2. 将以下代码复制到 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:输出哪些文件的时间戳已经被更新。

运行脚本:

  1. 以管理员身份启动 PowerShell。
  2. 导航到你脚本所在的文件夹。
  3. 运行 PowerShell 脚本:
powershell
.\RefreshFileTimestamps.ps1

注意:

  • 该脚本直接更新文件的修改时间,不会改变文件内容。它通过 Set-ItemProperty 来修改文件的 LastWriteTime 属性,从而实现刷新文件修改时间的效果。

方法 3: 使用 AutoHotkey 脚本(模拟键盘输入)

如果你希望模拟 Ctrl + S 快捷键来保存文件而不使用记事本的手动操作,可以考虑使用 AutoHotkey 脚本。AutoHotkey 是一个强大的自动化工具,可以用来模拟键盘、鼠标等操作。

步骤:

  1. 安装 AutoHotkey(如果尚未安装)。
  2. 创建 AutoHotkey 脚本(例如 RefreshFileTimestamps.ahk)。
  3. 将以下内容复制到脚本中:
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:关闭记事本窗口。

运行脚本:

  1. 双击 RefreshFileTimestamps.ahk 脚本文件。
  2. 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执行策略

  1. 以管理员身份打开PowerShell

    • Win + X 键,然后选择 Windows PowerShell (管理员) 或者在开始菜单中搜索 PowerShell,右键点击并选择“以管理员身份运行”。
  2. 检查当前的执行策略

    • 在管理员PowerShell窗口中输入以下命令来查看当前的执行策略:

      powershell浅色版本

      Get-ExecutionPolicy
      
  3. 设置为允许本地脚本运行

    • 输入以下命令将执行策略设置为允许运行本地编写的脚本,但仍然阻止从互联网下载的脚本(除非它们被标记为可信)。这是相对安全的选择。

      powershell浅色版本

      Set-ExecutionPolicy RemoteSigned
      
    • 系统可能会提示你确认更改,输入 Y 或者 A 来同意。

  4. 运行你的脚本

    • 现在你可以尝试再次运行你的脚本,使用如下命令:

      powershell浅色版本

      .\目录修改.ps1
      
  5. 恢复默认执行策略(可选)

    • 如果你想要在完成任务后恢复到更严格的执行策略,可以使用以下命令:

      powershell浅色版本

      Set-ExecutionPolicy Restricted
      

注意事项

  • 安全性考虑:更改执行策略可能带来安全风险,请确保你信任你要运行的脚本。RemoteSigned 是一个折中的选项,它允许运行本地编写的脚本而不影响来自网络的脚本的安全性。

  • 系统范围的影响

    :上述更改会影响整个系统的PowerShell执行策略。如果你只希望临时改变策略来运行一次脚本,可以在运行脚本时直接指定执行策略,例如:

    powershell浅色版本

    powershell -ExecutionPolicy Bypass -File .\目录修改.ps1
    

    这种方式不会永久更改系统的执行策略。

通过以上步骤,你应该能够成功运行你的PowerShell脚本,并且递归地更新文件夹及其子文件夹中所有文件的时间戳