Mar*_*ica 5 svn windows batch-file svnsync file-uri
在基于 Windows 的 SVN 安装(使用 CollabNet Subversion Edge)中,我有一个提交后挂钩批处理文件,我在其中构建了一个存储库文件夹名称,我需要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:\=/%
Run Code Online (Sandbox Code Playgroud)
第 1 行将相对文件名扩展为绝对文件名;第 2 行file:///;第 3 行处理 UNC 路径的特殊情况;第 4 行确保我们只使用正斜杠。
总之,这些变换\\remotehost\share\folder来file://remotehost/share/folder,并d:\folder到file:///d:/folder。
就我的测试而言,上述命令总是会产生file:一个 SVN 命令行可接受的URL,也可能用于其他用途。
这是不是真的正确,唯一的一点是,空格和其他特殊字符,如#中所产生的不正确的URL编码的file:网址:D:/my test#repo变file:///D:/my test#repo,这在技术上是不正确的。但是,在我的特定用例中,这没有问题,因为 SVN 命令行解析器无论如何都会找到存储库。