WScript 创建的快捷方式未在文件名中显示文件扩展名

问题描述 投票:0回答:1

我使用 WScript 生成快捷方式,但与手动创建的快捷方式不同,文件名不包含原始文件的文件扩展名。例如,如果我用鼠标在文件资源管理器中创建一个快捷方式,假设“File1.xlsm”,则该快捷方式包含“.xlsm”部分。

这是相关代码的摘录。

Set objShellWScript = CreateObject("WScript.Shell")

If objFolder.Files.Count > 0 Then
    
    For Each objFile In objFolder.Files
        
        With objFile
            
            varFilePath = Replace(.Path, varDestinationFolderPath, varShortcutFolderPath, 1, 1)
            
            Set objShortcut = objShellWScript.CreateShortcut(Replace(varFilePath, "." & objFileSystemObject.GetExtensionName(varFilePath), ".lnk"))
            
            With objShortcut
                
                .Description = objFile.Path
                
                .TargetPath = objFile.Path
                
                .Save
                
            End With
            
            Set objShortcut = Nothing 
           
        End With    
    
    Next objFile  
  
End If

Set objShellWScript = Nothing

对于它的价值,我使用 FileSystemObject 来循环文件。

是否有一个快捷方式属性可以提供帮助?我环顾四周,但我发现的信息并不是特别有帮助。当您将鼠标悬停在文件资源管理器中的文件上时,描述会显示tootip的文件扩展名,关闭但没有雪茄。

我还尝试使用 FileSystemObject MoveFile 来查看重命名文件是否有任何作用,但没有运气。添加 vbscript 和 vba 标签。

vba vbscript
1个回答
0
投票

您传递给

CreateShortcut
的参数将用作快捷方式文件的文件名。文件名(不带路径且不带
.lnk
)显示在资源管理器中(或桌面上)。

文件名本身不需要与其指向的文件名匹配。您可以创建一个名为“My Homework”的快捷方式,指向“Book1.xlsx”。

如果您想查看包含扩展名的文件名作为快捷方式名称,则必须将包含扩展名的文件名传递给

CreateShortcut
。只需在文件末尾添加
.lnk
(否则
CreateShortcut
将引发运行时错误)。

在您的代码中,您将扩展名替换为

.lnk
。相反,只需在名称末尾添加
.lnk
(因此删除
rename
)即可将扩展名保留为名称的一部分:

Set objShortcut = objShellWScript.CreateShortcut(varFilePath & ".lnk")

现在快捷方式的完整文件名是

Book1.xlsx.lnk
。请注意,
Book1.xlsx
是文件名(不带扩展名),点是文件名中的有效字符。您甚至可以将其重命名为
My Homework.docx
- 它仍然指向 Excel 文件,文件图标不会更改,并且单击它时 Windows 将打开 Excel,而不是 Word。

© www.soinside.com 2019 - 2024. All rights reserved.