我正在使用JavaScript/JScript编写一个小型的Windows脚本,用于在通过文件操作获取的字符串中查找与正则表达式匹配的内容。
文件路径可以是相对路径或绝对路径。如何判断给定的路径是绝对路径还是相对路径,并将其转换为绝对路径以进行文件操作?
我正在使用JavaScript/JScript编写一个小型的Windows脚本,用于在通过文件操作获取的字符串中查找与正则表达式匹配的内容。
文件路径可以是相对路径或绝对路径。如何判断给定的路径是绝对路径还是相对路径,并将其转换为绝对路径以进行文件操作?
如何判断给定的路径是绝对路径还是相对路径...
根据 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);
要检查路径是相对路径还是绝对路径,请查找前导/
。
如果没有,则需要将路径连接到基本路径。一些编程环境具有“当前工作目录”,但生存在浏览器中的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