![是否有可能在 Windows 中更改符号链接的日期/时间?](https://linux22.com/image/637784/%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E5%9C%A8%20Windows%20%E4%B8%AD%E6%9B%B4%E6%94%B9%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9A%84%E6%97%A5%E6%9C%9F%2F%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我们使用 FSRM 将文件服务器上的旧文件(超过 2 年)存档到另一个目录,方法是移动文件并用符号链接替换这些文件 - 问题是符号链接的文件日期是脚本运行的日期 - 与原始文件日期无关。用户对一半文件的日期相同感到不满 - 是否可以将符号链接的日期修改为与原始文件的日期相同,或者从头开始使用正确的日期重新创建它们?有人在使用 FSRM 存档时遇到过这个问题吗?
答案1
这似乎是可能的,但远非易事。做好准备……我不知道有什么实用程序可以做到这一点,但是有人输入了一些似乎可以正常工作的代码。
DWORD SetSymLinkTimesW(const wchar_t *filename, const FILETIME *ftc,
const FILETIME *fta, const FILETIME *ftw)
{
DWORD ret;
HANDLE h;
h = CreateFileW(filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_FLAG_OPEN_REPARSE_POINT, NULL);
if(h != INVALID_HANDLE_VALUE)
{
if(SetFileTime(h, ftc, fta, ftw) == TRUE)
{
CloseHandle(h);
ret = NO_ERROR;
}
else
{
ret = GetLastError();
CloseHandle(h);
}
}
else
ret = GetLastError();
return ret;
}
I've just copied and pasted your code into a console application and
it successfully changes the timestamps of a symlink for me (Win8.1
32-bit).
int _tmain(int argc, _TCHAR* argv[])
{
FILETIME ft;
GetSystemTimeAsFileTime( &ft );
SetSymLinkTimesW( argv[1], &ft, &ft, &ft );
return 0;
}
答案2
DirDate v6.3 现在实现了这一点 -http://www.datamystic.com/dirdate2.exe
更改符号链接(symlinks)(也称为文件重新解析点)的日期和时间。