You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码以获取所有用户配置文件中所有快捷方式的目标路径?

搞定VBScript遍历所有用户开始菜单快捷方式的问题

嘿,我明白你的困扰——当前代码只盯着Public的公共开始菜单,却漏掉了C:\Users下每个用户的个人快捷方式。别担心,咱们来修改代码,让它覆盖所有用户目录。

问题根源

你原来指定的C:\ProgramData\Microsoft\Windows\Start Menu\Programs是公共开始菜单,而每个用户的个人快捷方式都存在C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs这个路径里。要覆盖所有用户,得先枚举C:\Users下的所有用户文件夹,再逐个处理对应的个人开始菜单,加上公共路径一起扫。

修改后的完整代码

下面是调整好的代码,我加了详细注释,方便你理解:

Option Explicit

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")

' 定义公共开始菜单和用户目录根路径
Dim sPublicStartMenu, sUsersRoot
sPublicStartMenu = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
sUsersRoot = "C:\Users\"

' 先处理公共开始菜单
ProcessStartMenu sPublicStartMenu

' 遍历C:\Users下的所有用户文件夹
Set oUsersFolder = oFSO.GetFolder(sUsersRoot)
For Each oUserFolder In oUsersFolder.SubFolders
    ' 拼接当前用户的个人开始菜单路径
    Dim sUserStartMenu
    sUserStartMenu = oUserFolder.Path & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
    
    ' 先检查路径是否存在(避免系统账户或空目录报错)
    If oFSO.FolderExists(sUserStartMenu) Then
        ProcessStartMenu sUserStartMenu
    End If
Next

' 封装处理单个开始菜单文件夹的子过程,复用逻辑
Sub ProcessStartMenu(sFolderPath)
    WScript.Echo "正在扫描: " & sFolderPath
    
    ' 获取当前文件夹对象
    Set oFolder = oFSO.GetFolder(sFolderPath)
    
    ' 遍历文件夹内的.lnk快捷方式文件
    For Each oFile In oFolder.Files
        If LCase(oFSO.GetExtensionName(oFile.Name)) = "lnk" Then
            ' 读取快捷方式的目标路径(你可以替换成自己的处理逻辑)
            Set oShortcut = oShell.CreateShortcut(oFile.Path)
            WScript.Echo "找到快捷方式: " & oFile.Name & " -> " & oShortcut.TargetPath
            Set oShortcut = Nothing
        End If
    Next
    
    ' 递归处理子文件夹(确保深层目录的快捷方式也被扫描)
    For Each oSubFolder In oFolder.SubFolders
        ProcessStartMenu oSubFolder.Path
    Next
End Sub

' 释放对象
Set oFSO = Nothing
Set oShell = Nothing

关键调整点

  1. 枚举用户目录:通过oFSO.GetFolder(sUsersRoot)获取所有用户子文件夹,逐个遍历处理。
  2. 路径检查:拼接用户个人开始菜单路径后,先判断路径是否存在,避免因系统账户(比如Default)或缺失目录导致报错。
  3. 逻辑复用:把扫描文件夹的代码封装成ProcessStartMenu子过程,公共路径和用户路径都用同一套逻辑,代码更整洁。
  4. 递归扫描:处理子文件夹,确保开始菜单里嵌套的快捷方式也不会被漏掉。

小提示

  • 运行这个脚本需要管理员权限,否则可能无法访问其他用户的AppData目录(毕竟涉及隐私嘛)。
  • 如果想跳过系统默认账户(比如Default、Public),可以在遍历用户文件夹时加个判断:
    ' 跳过指定系统账户
    If oUserFolder.Name = "Default" Or oUserFolder.Name = "Public" Then
        Continue For
    End If
    

内容的提问来源于stack exchange,提问作者RadFox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:30