AutoHotkey 语言 批量修改文件时间戳的方法

AutoHotkey阿木 发布于 2025-06-12 10 次阅读


AutoHotkey Language: Batch Modify File Timestamps

Introduction

AutoHotkey is a powerful scripting language for automating tasks on Windows systems. It allows users to create scripts that can automate repetitive tasks, such as file operations, system settings, and more. One of the useful applications of AutoHotkey is the ability to modify file timestamps. This article will delve into the details of how to use AutoHotkey to batch modify file timestamps, including creation, last modified, and last accessed times.

Understanding File Timestamps

Before we dive into the code, it's important to understand what file timestamps are and why they are important. In Windows, each file has three timestamps:

1. Creation Time: The date and time when the file was created.
2. Last Modified Time: The date and time when the file was last modified.
3. Last Accessed Time: The date and time when the file was last accessed.

These timestamps are crucial for various purposes, such as version control, backup systems, and file integrity checks. Modifying these timestamps can be useful for testing, cleaning up logs, or simply for fun.

AutoHotkey Script Structure

An AutoHotkey script is composed of sections, each starting with a `` symbol followed by a section name. The most important sections for our task are:

- `Include`: Used to include other AutoHotkey files.
- `Persistent`: Keeps the script running in the background.
- `^!F4`: Hotkey to exit the script.
- `Loop`: Used to iterate over files or directories.
- `FileGetTime`: Retrieves the current timestamp of a file.
- `FileSetTime`: Sets the timestamp of a file.

Batch Modify File Timestamps

To batch modify file timestamps, we'll create a script that iterates over a specified directory and its subdirectories, applying the desired changes to each file. Below is a step-by-step guide to creating the script.

Step 1: Set Up the Script

Create a new text file and save it with a `.ahk` extension, for example, `ModifyTimestamps.ahk`.

Step 2: Include Required Libraries

AutoHotkey does not have a built-in library for modifying file timestamps, but we can use the Windows API to achieve this. We'll include the `WinAPI` library to access the necessary functions.

ahk
Include, WinAPI.ahk

Step 3: Define the Main Function

We'll define a function that will be called when the script runs. This function will prompt the user for the directory to modify and the new timestamps.

ahk
ModifyTimestamps() {
InputBox, directory, Enter Directory, Please enter the directory path to modify timestamps:
If ErrorLevel
return

InputBox, creationTime, New Creation Time, Please enter the new creation time (YYYY-MM-DD HH:MM:SS):
If ErrorLevel
return

InputBox, lastModifiedTime, New Last Modified Time, Please enter the new last modified time (YYYY-MM-DD HH:MM:SS):
If ErrorLevel
return

InputBox, lastAccessedTime, New Last Accessed Time, Please enter the new last accessed time (YYYY-MM-DD HH:MM:SS):
If ErrorLevel
return

LoopFiles(directory, creationTime, lastModifiedTime, lastAccessedTime)
}

Step 4: Loop Through Files

We'll create a function called `LoopFiles` that will iterate over the specified directory and its subdirectories, applying the new timestamps to each file.

ahk
LoopFiles(directory, creationTime, lastModifiedTime, lastAccessedTime) {
Loop, Files, %directory%., Recurse
{
SetFileTime(A_LoopFileShortPath, creationTime, lastModifiedTime, lastAccessedTime)
}
}

Step 5: Set File Time

We'll use the `SetFileTime` function from the `WinAPI` library to set the file timestamps.

ahk
SetFileTime(filePath, creationTime, lastModifiedTime, lastAccessedTime) {
FileTime := DllStructCreate("DWORD;DWORD;DWORD;DWORD")
DllStructSetData(FileTime, "dwLowDateTime", creationTime)
DllStructSetData(FileTime, "dwHighDateTime", creationTime >> 32)
DllStructSetData(FileTime, "dwLowDateTime", lastModifiedTime)
DllStructSetData(FileTime, "dwHighDateTime", lastModifiedTime >> 32)
DllStructSetData(FileTime, "dwLowDateTime", lastAccessedTime)
DllStructSetData(FileTime, "dwHighDateTime", lastAccessedTime >> 32)

FileTimeToFileTime(FileTime, fileTime)
SetFileTime(filePath, fileTime, fileTime, fileTime)
}

Step 6: Run the Script

Now that we have all the pieces in place, we can run the script by pressing `^!F4` (Ctrl+Alt+F4) to execute the `ModifyTimestamps` function.

Conclusion

In this article, we've explored how to use AutoHotkey to batch modify file timestamps. By following the steps outlined above, you can create a script that will iterate over a directory and its subdirectories, setting the creation, last modified, and last accessed times of each file to the values specified by the user.

Remember that modifying file timestamps can have unintended consequences, especially in environments where file integrity is critical. Always use such scripts with caution and ensure that you have backups of important data.