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

标签 windows batch-file svn svnsync file-uri

在基于 Windows 的 SVN 安装(使用 CollabNet Subversion Edge)中,我有一个提交后 Hook 批处理文件,我在其中构建了一个存储库文件夹名称,我需要使用 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:\=/%

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

合在一起,这些将 \\remotehost\share\folder 转换为 file://remotehost/share/folder,和 d:\folderfile:///d:/folder

就我的测试而言,上述命令总是生成 file: URL,该 URL 可用于 SVN 命令行,也可能用于其他用途。

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

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

相关文章:

java - 将 java -cp 与 jar 文件一起使用时出错

batch-file - 使用 WinSCP 将文件下载到本地子文件夹时出错

svn - 为什么在 TortoiseSVN 的提交对话框中看不到新添加的文件?

java - 打开 Eclipse 时无法加载 JavaHL 库

svn - 如何备份和恢复SVN存储库?

c++ - 隐藏光标

c++ - 如何在 C++ 中更改控制台上特定输出的颜色

batch-file - 批处理脚本 - 带空格的变量字符串

windows - 安装 Windows 示例端口监视器 localmon 时出错

ruby-on-rails - Windows 上的 Rails 部署环境