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

Windows11下PowerShell脚本固定文件夹至快速访问时误删已固定项问题

问题原因与解决方案

这确实是Windows 11(包括Windows 10 20H2及以后版本)的设计特性,并非脚本本身的问题。

核心原因

InvokeVerb("pintohome")这个操作的本质是切换固定状态:

  • 当目标文件夹未固定到快速访问时,触发该操作会完成固定;
  • 当文件夹已固定时,触发它会直接取消固定。

微软在后期Windows版本中调整了这个动词的行为,把原本单一的"添加固定"改成了双向切换,和右键菜单的操作逻辑保持一致——右键点击已固定的文件夹,菜单显示"从快速访问取消固定",未固定则显示"固定到快速访问",而pintohome是这个操作的统一标识符,调用一次就触发当前状态的反转。

解决方法:先判断状态再执行操作

要实现"仅固定、不切换"的效果,需要先检查目标文件夹是否已在快速访问中,再决定是否调用固定操作。以下是PowerShell示例代码:

# 替换为你要固定的文件夹路径
$targetPath = "C:\Your\Target\Folder"

# 创建Shell对象
$shell = New-Object -ComObject Shell.Application
# 获取文件夹父目录对象
$parentFolder = $shell.Namespace((Split-Path $targetPath -Parent))
# 获取目标文件夹的Shell项
$folderItem = $parentFolder.ParseName((Split-Path $targetPath -Leaf))

# 检查是否已固定(针对中文系统,英文系统请替换动词名称为"Unpin from Quick access")
$isAlreadyPinned = $false
foreach ($verb in $folderItem.Verbs()) {
    if ($verb.Name -eq "从快速访问取消固定(&U)") {
        $isAlreadyPinned = $true
        break
    }
}

# 仅当未固定时执行固定操作
if (-not $isAlreadyPinned) {
    $folderItem.InvokeVerb("pintohome")
}

补充说明

  • 不同语言的Windows系统,右键动词的显示名称不同,需要对应调整判断条件;
  • 也可以通过查询注册表来判断固定状态,但Shell对象的动词检查方法更直观且不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:20:11