【问题标题】:Batch script to convert a Subversion (SVN) symlink text file into NTFS symbolic link将 Subversion (SVN) 符号链接文本文件转换为 NTFS 符号链接的批处理脚本
【发布时间】:2025-12-11 05:15:02
【问题描述】:

我们的设置:
我们使用混合的 Windows XP 和 Windows 7 机器进行开发,以及一些保存我们的 Subversion (SVN) 存储库并托管我们的网站的 unix 服务器。 我们的网站存储在 SVN 存储库中,因此当需要对网站进行更改时,我们会将 SVN 的工作副本检出到我们的 Windows 机器上。完成所有更改后,我们将工作副本提交回 SVN 存储库,然后一个 bash 脚本将存储库的头部部署到网络服务器。 (相当标准的东西)

我的问题:
该网站使用(unix)符号链接(无法替换)。因此,检查它并从 unix 服务器提交工作正常,符号链接仍然存在。但是由于我们使用的是 Windows 开发机器,SVN 不会自动将它们的符号链接表示转换为 Windows/NTFS 符号链接,即使它们受支持(我们的 Windows XP 机器已安装相关驱动程序)。 SVN 符号链接是没有扩展名的文件,其中包含:

link  /path/link/was/pointing/to

我的问题:
我不精通批处理脚本(用于 unix bash 脚本)。 任何关于如何在批处理脚本中将 SVN 的文本符号链接最好地转换为有效的 Windows/NTFS 符号链接的指导都会很受欢迎。

如果我将 Windows 符号链接提交到 SVN 存储库会发生什么?
我需要第二个脚本来将 Windows 符号链接转换回 SVN 文本链接吗?
后者会破坏 Unix 端 SVN 文本链接到 Unix 符号链接的转换吗?

【问题讨论】:

  • Windows 符号链接的工作方式与 Unix 不同。此外,您不能以任何简单的方式从命令行在 Windows 中创建符号链接,而且考虑到这些文件是由 Windows 自动编译的,我从未听说过任何脚本方面的东西。正因为如此,您无法真正进行相反的转换,因为脚本语言通常不支持二进制数据。
  • 您当然可以在 Windows Vista 和更早版本中创建符号链接,只使用命令行和内置命令。 Windows XP 需要单独的(小)下载,并且只提供等效的硬链接。见Complete Guide to Symbolic Links on Windows

标签: windows svn unix batch-file symlink


【解决方案1】:

我建议进入 VBScript 和 Windows Script Host。比如说,我有一个名为C:\Temp\Hello.txt 的文件,我想创建一个链接C:\Temp\Sample。我将创建一个名为MakeSample.vbs 的脚本,如下所示:

Set WshShell = CreateObject("Wscript.shell")
Set oMyShortcut = WshShell.CreateShortcut("C:\Temp\Sample2.lnk")
oMyShortcut.WindowStyle = 3
oMyShortcut.TargetPath = "C:\Temp\Hello.txt"
oMyShortCut.Save

在 VBScript 中读取 LINK 文件很简单,例如:

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\Temp\linkfile.")
txt = f.ReadAll
f.Close
MsgBox txt

我认为以上述内容为起点,破解某些东西应该相对简单。

【讨论】: