在 registry/desktop.ini 中设置子文件夹类型

在 registry/desktop.ini 中设置子文件夹类型

我使用 Winaero Tweaker 禁用了自动文件夹类型发现,但这只是将所有文件夹设置为常规项(它创建HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell并将其设置为NotSpecified),这会阻止 Windows 保存自定义文件夹类型。

有没有办法将文件夹类型(音乐、图片等,包括子文件夹)设置为适当的文件类型,同时仍通过将所有其他文件夹设置为来阻止 Windows 自行设置或更改它NotSpecified

脚本输出:

{5C4F28B5-F869-4E84-8E60-F11DB97C5CC7} Generic
{7D49D726-3C21-4F05-99AA-FDC2C9474656} Documents
{B3690E58-E961-423B-B687-386EBFD83239} Pictures
{94D6DDCC-4A68-4175-A374-BD584A510B78} Music
{5FA96407-7E77-483C-AC93-691D05850DE8} Videos
{885A186E-A440-4ADA-812B-DB871B942259} Downloads
{C4D98F09-6124-4FE0-9942-826416082DA9} UsersLibraries
{FBB3477E-C9E4-4B3B-A2BA-D3F5D3CD46F9} Documents.Library
{0B2BAAEB-0042-4DCA-AA4D-3EE8648D03E5} Pictures.Library
{3F2A72A7-99FA-4DDB-A5A8-C604EDF61D6B} Music.Library
{5F4EAB9A-6833-4F61-899D-31CF46979D49} Generic.Library
{631958A6-AD0F-4035-A745-28AC066DC6ED} Videos.Library
{3F98A740-839C-4AF7-8C36-5BADFB33D5FD} Documents.LibraryFolder
{24CCB8A6-C45A-477D-B940-3382B9225668} HomeFolder

答案1

是的,可以通过注册表完成。大多数文件夹都有一个定制选项卡特性对话框,您可以在其中指定/覆盖默认/嗅探檔案類型。在类型选择器下方,有一个标记为的复选框:Also apply this template to all subfolders

在此处输入图片描述

选中此选项后,所选檔案類型适用于现有子文件夹和任何新子文件夹。底层方法是创建文件夹的子项(已保存视图)名为Inherit。此键包含单个REG_SZ值命名檔案類型包含的字符串标识符檔案類型

在此处输入图片描述

当文件夹没有保存的视图(新创建或从未查看过)时,探索者查询文件夹的父级及其祖先的已保存视图以查看是否指定了继承。如果找到,该值优先于内容嗅探

这就是最精彩的部分!

尽管 UI 中没有指定驱动器继承的选项,这台电脑,以及rooted/虚拟桌面,如果将Inherit子密钥添加到继承人,它将影响几乎所有子文件夹。根桌面是选择桌面从最左边的下拉箭头探索者地址栏。

在此处输入图片描述

找到它的NodeSlot,检查中的值BagMRU

在此处输入图片描述

因此我想Inherit为 Bag #3 创建一个子键:

在此处输入图片描述

这会将Generic(NotSpecifed) FolderType 强加给任何未指定其他类型的文件夹。这台电脑可以指定它们的关联类型并设置继承来覆盖这个全局默认值。


代码故障排除

获取已保存视图的数量。如果已达到 5000,那就是限制,情况会变得很奇怪 --- BagMRU 和 Bags必须被删除。

((gp "HKCU:\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU").Nodeslots).count

什么文件夹类型通过设置自定义模板应用于文件夹

$Defaults = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Defaults'
$FT       = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes'
(gi $defaults).Property |
 Select @{N = 'ID'; E = {$_}},
        @{N = 'Name'; E = {(gp "$FT\$_").CanonicalName}}

这将列出文件夹类型当前已应用于一个或多个已保存的视图。想知道您的任何文件夹是否正在使用模板Music

$source = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\'
$Lookup = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes'
gci $source -recurse | ? PSChildName -like '{*}' |
    select -Expand PSChildName -Unique | ForEach{ 
        [PSCustomObject]@{
            'ID' = $_
            'Name' = (gp "$Lookup\$_").CanonicalName
        }
}

让我们看看哪些包包使用了音乐模板:

$BagMRU = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU'
$Bags   = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags'
gci $bags -recurse |
 ? PSChildName -like '{94D6DDCC-4A68-4175-A374-BD584A510B78}' | ForEach{
    $Bag = $_.Name.Split('\')[-3]
    gci $BagMRU -recurse | ? { $_.GetValue('NodeSlot') -like $Bag } | ForEach{
        [PSCustomObject]@{
           'Bag'     = $Bag
           'MRUPath' = ($_.PSPath -split 'BagMRU')[-1]
        }
    }
}

相关内容