在基于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/