我想将默认的新文件夹视图设置为Documents
,无论其内容是什么。
我已将 中的所有驱动器和子文件夹设置"optimize this folder for"
为 视图Documents
,并将其应用于所有文件夹,但是当我创建新文件夹(尤其是在桌面中)并向其中添加一些图像时,文件夹视图更改为Pictures
。有什么建议吗?
答案1
Explorer 根据 BagMRU 键中的完整命名空间路径对已保存的文件夹视图进行索引。因此,桌面上的文件夹可以保存不同的视图:
FolderName
This PC\Desktop\FolderName
This PC\C:\Users\<UserProfileFolder>\Desktop\FolderName
当Also apply this template to all subfolders
从文件夹对话框中选择时Properties
,Inherit
将在注册表中该文件夹的 PropertyBag 下创建一个名为的子项。
当文件夹首次显示在资源管理器中时,其所有命名空间检查祖先,而不是文件系统祖先是否Inherit
有子项。如果找到,它将覆盖内容嗅探和文件中指定的任何 FolderType desktop.ini
。
Process Monitor 揭示了一个有趣(且有用)的事实:尽管无法通过 UI 设置继承这台电脑, 这根/虚拟 桌面以及其他非文件系统位置,探索者仍会检查其 PropertyBags 中的Inherit
子项。因此,为根桌面创建Inherit
子项将控制在桌面上创建的文件夹的 FolderType,以及所有其他文件系统文件夹,包括位于这台电脑,但令人讨厌的例外是Downloads
。搜索结果和库是虚拟文件夹,不受此设置的影响。
要为根桌面设置继承:
通过查看然后关闭来确保根桌面视图的 PropertyBag 存在探索者. 要导航到 rooted 桌面:
- 从这台电脑或者快速访问
Up
,点击探索者地址栏。 - 将命令复制并粘贴
shell:Desktop
到探索者地址栏或Run
对话框。
- 从这台电脑或者快速访问
NodeSlot
通过检查注册表项下的 注册表值来确定袋子编号:HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU
使用:创建注册表项:
HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\<Bag#>\Shell\Inherit
其中有两种 REG_SZ 类型:FolderType
其值为Documents
SniffedFolderType
其值为Documents
电源外壳(在第一行替换实际的袋子编号,然后将整个块粘贴到电源外壳):
$BagNum = <your bag #> $Path = ( mkdir "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\$BagNum\Shell\Inherit" -Force ).FullName 'FolderType' , 'SniffedFolderType' | ForEach { New-ItemProperty $Path $_ -Value 'Documents' | out-null }
注册文件模板(替换关键路径中的包号):
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\<Bag#>\Shell\Inherit] "FolderType"="Documents" "SniffedFolderType"="Documents"
以上是快速测试/验证编辑是否有效的好方法。但是,如果您过去曾被内容嗅探和其他默认行为所困扰,并且一致性是您的目标,那么最好从“干净”开始 --- 删除以前保存的文件夹视图,以确保您想要的视图全面应用。这是通过以下方式实现的:
- 删除
BagMRU
和Bags
键。 - 注销并重新登录或重新启动 Shell 以清除所有缓存的视图信息。
以下电源外壳将执行此操作,并直接打开和关闭 Explorer 到桌面 --- 使桌面包成为 #1。然后它将创建键INherit
及其值。
Set-Location 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell'
'BagMRU' , 'Bags' | Remove-Item -Recurse
Get-Process explorer | Stop-Process
Sleep 5
($Shell = New-Object -com shell.application).Open("shell:Desktop")
Sleep 5
@($Shell.Windows()).Quit()
Sleep 5
$Path = (mkdir 'Bags\1\Shell\Inherit' -Force).FullNName
'FolderType' , 'SniffedFolderType' | ForEach {
New-ItemProperty $Path $_ -Value 'Documents' | out-null
}