我使用 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 标签。
您传递给
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。