在Windows中更改符号链接的目标

8

如何更改已存在的符号链接的目标。任何解决方案都可以:控制台,powershell等。

重要的是要使此更改具有原子性,因此删除链接然后创建新链接的解决方案对我不起作用。


如果您将删除和重新创建操作包装在一个事务中,我相信它将是原子性的。 - Harry Johnston
什么样的事务?像在同一磁盘上移动文件这样的文件系统操作应该是原子性的。但两个文件操作则不是。如果我错了,请纠正我。 - Eugeniu Torica
请看我的回答。Windows Vista中增加了对事务性NTFS的支持。 - Harry Johnston
下面@Gyan的答案绝对有效。我也进行了测试,它对我起作用。 - kevinarpe
4个回答

2

截至2017年3月,Far Manager使用DeviceIoControl函数来更改/编辑符号链接或联接目标。 - Anton Krouglov

2

谢谢,哈利。从来没有想过可以进行交易。不幸的是,弃用是一个不好的迹象,所以我不确定我能否使用它。 - Eugeniu Torica

1

1
一个稍微修改过的LSemi方法在我的Windows 7 CMD控制台中适用。
mklink TempLink NewTarget

copy /l /y TempLink OldLink

del TempLink

我有一个进程,每秒钟多次读取OldLink,并且通过这种方法,我能够不断更新OldLink到新的目标,而不会导致读取错误。严格来说,这可能不是原子操作,但是影响的时间非常短,不会干扰。


“/l”是什么意思?在Windows Server copy中没有列出。 - Tom Hale
2
Windows 7中的copy /?显示了以下内容:/L 如果源是符号链接,则将链接复制到目标,而不是源链接指向的实际文件。 - Gyan
这个回答很棒,为什么会被踩呢?如果可以的话,@Gyan,你可以添加更多细节,比如dir命令的输出,以显示每个步骤后文件系统的确切变化。我测试了你的步骤:在一个单独的Cygwin窗口中,我运行了一个简单的无限循环:while true; do cat symlink.txt; done。然后我使用了你的技巧来更新symlink.txt,使其指向不同的文件。我的无限读取文件循环从未失败过。完美地工作着。我想知道copy是如何执行此操作的!很烦人的是,MKLINK没有/F(强制)选项来执行相同的操作。UNIX有这个选项。 - kevinarpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接