如何确定给定路径是绝对路径还是相对路径,并将其转换为绝对路径以进行文件操作?

4

我正在使用JavaScript/JScript编写一个小型的Windows脚本,用于在通过文件操作获取的字符串中查找与正则表达式匹配的内容。

文件路径可以是相对路径或绝对路径。如何判断给定的路径是绝对路径还是相对路径,并将其转换为绝对路径以进行文件操作?

2个回答

6

如何判断给定的路径是绝对路径还是相对路径...

根据 MSDN 文章 文件、路径和命名空间的命名

如果文件名不以以下任意一项开头,则该文件名是相对于当前目录的相对路径:

  • UNC 名称,格式为两个反斜杠字符(“\\”)。有关详细信息,请参阅下一节。
  • 磁盘标识符加上反斜杠,例如“C:\”或“d:\”。
  • 单个反斜杠,例如“\directory”或“\file.txt”。这也被称为绝对路径

因此,严格来说,以单个反斜杠(\)开头的路径是绝对路径。您可以按照以下方式检查此条件:

if (/^\\(?!\\)/.test(path)) {
  // path is absolute
}
else {
  // path isn't absolute
}

但通常我们所说的“绝对路径”实际上是指“完全限定路径”。在这种情况下,您需要检查所有三个条件才能区分完全限定路径和相对路径。例如,您的代码可能如下所示:

function pathIsAbsolute(path)
{
  if ( /^[A-Za-z]:\\/.test(path) ) return true;
  if ( path.indexOf("\\") == 0 )   return true;
  return false;
}

或者(使用单个正则表达式和稍微不那么易读的方式):
function pathIsAbsolute(path)
{
  return /^(?:[A-Za-z]:)?\\/.test(path);
}

使用 FileSystemObject.GetAbsolutePathName 方法将其转换为绝对路径以进行文件操作?
var fso = new ActiveXObject("Scripting.FileSystemObject");
var full_path = fso.GetAbsolutePathName(path);

1

要检查路径是相对路径还是绝对路径,请查找前导/。 如果没有,则需要将路径连接到基本路径。一些编程环境具有“当前工作目录”,但生存在浏览器中的JavaScript没有,因此您只需要选择一个基本路径并坚持使用它。

function full_path(my_path) {
    var base_path = "/home/Sriram/htdocs/media";
    var path_regex = /^\/.*$/;
    if(path_regex.test(my_path)) {
        return my_path;
    } else {
        return base_path + my_path;
    }
}

路径可能包含换行符,而javascript正则表达式.无法匹配,因此您可能需要开发更复杂的正则表达式以确保所有路径正常工作。 不过,我认为这超出了本答案和我的知识范围。 :-)


前导的 / 不是很相对 - 它指向根目录。相对路径可以是 images/smile.gif../parent.txt 等等。 - Kobi
1
一切正常:他说如果路径不以“/”开头,则该路径是相对的,这是正确的。 - ZyX
他不是说他正在为Windows编写脚本吗? - Horia Dragomir
你如何判断在Windows中提供的路径是绝对路径还是相对路径?我能否通过Windows脚本宿主的内置函数来实现它? - Sriram
这是我的逻辑:如果字符串中包含“:”,那么它必须是绝对路径,因为“:”符号通常出现在根目录之后。 - Sriram
我有点忽略了这是一个“Windows脚本”,也就是说,它是一个MS Windows系统的javascript shell。我从未见过这样的东西,如果我更好地理解了问题,我就不会回答了。 ^.^正如我上面所写的,我认为我的答案适用于在浏览器中运行的javascript。 - Ryan Prior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接