如何将 Windows 路径转换为文件:URL,批处理文件中,适合 SVN 命令行使用

Mar*_*ica 5 svn windows batch-file svnsync file-uri

在基于 Windows 的 SVN 安装(使用 CollabNet Subversion Edge)中,我有一个提交后挂钩批处理文件,我在其中构建了一个存储库文件夹名称,我需要svnsync使用file:指向该 Windows 文件夹URL。

现在的问题是:如何将 Windows 文件夹或文件名转换为file:URL,以使该 URL 至少为 SVN 命令行工具所接受?

Mar*_*ica 5

在批处理文件中,如果变量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:\=/%
Run Code Online (Sandbox Code Playgroud)

第 1 行将相对文件名扩展为绝对文件名;第 2 行file:///;第 3 行处理 UNC 路径的特殊情况;第 4 行确保我们只使用正斜杠。

总之,这些变换\\remotehost\share\folderfile://remotehost/share/folder,并d:\folderfile:///d:/folder

就我的测试而言,上述命令总是会产生file:一个 SVN 命令行可接受的URL,也可能用于其他用途。

这是不是真的正确,唯一的一点是,空格和其他特殊字符,如#中所产生的不正确的URL编码的file:网址:D:/my test#repofile:///D:/my test#repo,这在技术上是不正确的。但是,在我的特定用例中,这没有问题,因为 SVN 命令行解析器无论如何都会找到存储库。