在基于 Windows 的 SVN 安装(使用 CollabNet Subversion Edge)中,我有一个提交后 Hook 批处理文件,我在其中构建了一个存储库文件夹名称,我需要使用 svnsync
调用 file:
指向该 Windows 文件夹的 URL。
现在的问题是:如何将 Windows 文件夹或文件名转换为 file:
URL,以使该 URL 至少能被 SVN 命令行工具接受?
最佳答案
在批处理文件中,如果变量 FILE_OR_FOLDER_NAME
包含(绝对或相对、本地或 UNC、带或不带空格、存在或不存在)Windows 文件或目录名称,则以下命令将相应的 file:
URL 放入变量 FILE_URL
:
for /f "delims=" %%R in ("%FILE_OR_FOLDER_NAME%") do set FILE_URL=%%~fR%
set FILE_URL=file:///%FILE_URL%
set FILE_URL=%FILE_URL:///\\=//%
set FILE_URL=%FILE_URL:\=/%
第 1 行将相对文件名扩展为绝对文件名;第 2 行在 file:///
之前;第 3 行处理 UNC 路径的特殊情况;第 4 行确保我们只使用正斜杠。
合在一起,这些将 \\remotehost\share\folder
转换为 file://remotehost/share/folder
,和 d:\folder
到 file:///d:/folder
。
就我的测试而言,上述命令总是生成 file:
URL,该 URL 可用于 SVN 命令行,也可能用于其他用途。
唯一不正确的是,空格和其他特殊字符(如 #
)在生成的 file:
URL 中没有正确编码:D:/my test#repo
变成了 file:///D:/my test#repo
,这在技术上是不正确的。但是,在我的特定用例中,这不会造成任何问题,因为 SVN 命令行解析器无论如何都会找到存储库。
关于windows - 如何在批处理文件中将Windows路径转换为文件: URL,,适合SVN命令行使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27817625/