如何将Windowspath转换为文件:URL,在batch file中,适合SVN命令行使用

在基于WindowsSVN安装中(使用CollabNet Subversion Edge),我有一个post-commit的挂钩文件,在这里我构build了一个存储库文件夹名,我需要用指向该文件夹的file: URL调用svnsync

现在的问题是:如何将Windows文件夹或文件名转换为file: URL,以便该URL至less可以被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行prepends file:/// ; 第3行处理UNC路径的特殊情况; 第4行确保我们只使用正斜杠。

综合起来,这些将\\remotehost\share\folderfile://remotehost/share/folderd:\folderfile:///d:/folder

至于我的测试,上述命令总是导致一个file: URL是可以接受的SVN命令行,也可能还用于其他用途。

唯一不正确的是空格和其他特殊字符(例如#在结果file:中没有被正确的URL编码file: URL: D:/my test#repo成为file:///D:/my test#repo ,这在技术上是不正确的。 不过,在我的具体使用情况下,这不构成问题,因为SVN命令行解析器无论如何都会找到存储库。