我需要解决的问题是缩短用户给出的文件路径。如果您不知道,有时无法在命令提示符中输入带空格的路径。您需要将路径放在引号中或将带空格的路径重命名为“abcdef~1”。
示例:“C:\Some Folder\Some File.exe”应变为“C:\SomeFo~1\SomeFi~1.exe”(不区分大小写)。
我正在 JavaScript 中创建一个函数来尝试使用这个想法来缩短文件路径。
function ShortenFilePath(FilePath){
var Sections = FilePath.split("\\")
for (Index = 0; Index < Sections.length; Index++){
while (Sections[Index].length > 6 && Sections[Index].match(" ") && !Sections[Index].match("~1")){
alert(Sections[Index])
Sections[Index] = Sections[Index].replace(" ","")
Sections[Index] = Sections[Index].substring(0,6)
Sections[Index] = Sections[Index] + "~1"
alert(Sections[Index])
}
}
var FilePath = Sections.join("\\")
alert(FilePath)
return FilePath
}
问题是,它会忽略文件扩展名并吐出“C:\SomeFo~1\SomeFi~1”。我需要帮助获取该文件扩展名(可能通过正则表达式)。如果你觉得这个功能可以优化,请分享你的想法。
更新:我相信问题已经解决。
更新2:之前的代码有一些问题,所以我稍微修改了一下。
更新 3:新的新问题。哎呀。如果没有扩展名的文件本身的名称少于 7 个字母,那么它将显示为“name.e~1.exe”。
更新4:我想我终于解决了这个问题。我认为。
function ShortenFilePath(FilePath){
var Sections = FilePath.split("\\")
Sections[Sections.length - 1] = Sections[Sections.length - 1].substring(0,Sections[Sections.length - 1].lastIndexOf("."))
for (Index = 0; Index < Sections.length; Index++){
while (Index > 0 && Sections[Index].match(" ") && !Sections[Index].match("~1")){
Sections[Index] = Sections[Index].replace(/ /gm,"")
Sections[Index] = Sections[Index].substring(0,6) + "~1"
}
}
return Sections.join("\\") + FilePath.substring(FilePath.lastIndexOf("."))
}