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

现在的问题是:如何将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

就我的测试而言,以上命令始终会生成SVN命令行可接受的file: URL,并可能还会用于其他用途。

唯一不正确的是,在生成的# URL中,空格和其他特殊字符(如file:)未正确进行URL编码:D:/my test#repo变为file:///D:/my test#repo,从技术上讲,这是不正确的。但是,在我的特定用例中,这没有问题,因为SVN命令行解析器可以找到存储库。

关于windows - 如何将Windows路径转换为批处理文件中的: URL,文件,适合SVN命令行使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27817625/

10-14 14:21
查看更多