我熟悉数字排序,其中的问题是数字作为值或字符串。我问的是另一个问题。
我希望以某种方式对文件进行排序,使得在主文件名后包含字符串的文件位于主文件名之后。我想要的示例如下:
Truck.docx
Truck - maintenance.docx
Truck - supplies.docx
但是,Windows 会将主文件放在底部进行排序:
Truck - maintennace.docx
Truck - supplies.docx
Truck.docx
这会产生一种混乱的排序。我知道我在其他地方见过这种“正确”的排序,也许是在 Android 或 MacOS 中。
有针对这个的解决方法吗?
答案1
使用 NirSoft 的实用工具PropertySystemView
,我发现 FileInfo 类型有一个属性没有映射到可见列:System.ItemNameDisplayWithoutExtension
。但是,它可以被指定为打开的探索者通过shell.application
com 对象以编程方式打开窗口。要快速演示,请打开探索者到包含问题文件的文件夹,为了演示代码简单起见,确保它是唯一的探索者窗口打开。然后:
打开电源外壳控制台窗口。
复制并粘贴以下命令:
@((New-Object -com shell.application).Windows())[0].Document.SortColumns = 'prop:System.ItemNameDisplayWithoutExtension;'
检查你的探索者窗户
现在,相对来说是个好消息。即使排序必须通过代码应用,如果您关闭窗口,该文件夹的排序设置也会保存(假设保存的视图正常工作)。但是,如果您在文件夹打开时应用不同的排序,则无法通过 UI 恢复为自定义排序,您必须再次执行代码。但您可以通过在所需的列标题上连续Shift+安全地应用二级、三级和四级排序标准。MouseClick
但是,当窗口以自定义排序显示时,您还可以选择将当前视图设置保存为所有文件夹的自定义默认设置使用当前文件夹的FolderType
(通用、文档、音乐等)使用Apply to Folders
:
我可以想到一些更晦涩的方法,可以轻松地将其用于多个文件夹,但这至少应该可以帮助您入门,并且通用和/或文档的自定义默认值可能就是您所需要的。
编辑:进一步测试显示...:
- 此 mod 只能应用于文件系统文件夹(目录)。尝试应用于包含文件系统项(快速访问、搜索结果、库)或显示为文件夹的压缩文件(.zip、.cab、.rar)的虚拟文件夹会失败,并出现错误:
Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))
- 演示代码旨在快速、简单地验证概念,但它很粗糙,因为它会抹去现有的排序标准 --- 更好的方法是仅在
System.ItemNameDisplay
已经指定为排序标准时才修改排序,并通过将其替换为System.ItemNameDisplayWithoutExtension
而保留其他标准不变。此修改后的代码将适用于多个探索者窗户打开,并限制于我所描述的限制:
@((New-Object -com shell.application).Windows()) | %{
If ( $_.Document.Folder.Self.IsFileSystem -and -not $_.Document.Folder.Self.IsBrowsable )
{
$NewSort = $_.Document.SortColumns -replace ('\.ItemNameDisplay;','.ItemNameDisplayWithoutExtension;')
$_.Document.SortColumns = $NewSort
}
}
因此,如果你想尽可能广泛地应用这一点:
- 假设默认 FolderType 有效,打开下面的用户文件夹,
This PC
因为它们各自使用不同的 FolderType:- 桌面(通用/一般)
- 文件(文件)
- 下载(下载)
- 音乐
- 图片
- 视频
- 复制并粘贴上述代码到电源外壳控制台窗口并按下enter执行。
- 然后,对每个文件夹进行:
- 将任何其他视图设置设为该 FolderType 的首选默认值。
- 从
View
功能区中执行Apply to Folders
,接受确认对话框。 - 关闭文件夹。