是否可以在 Windows 详细视图中按名称和日期排序?
首先按名称排序,以便我可以看到我想要的产品范围,然后按日期排序以获取产品的最新版本?
我无法使用 Windows 搜索,因为我已尽一切努力来解决它搜索速度缓慢的问题,而且考虑到该文件夹中有超过 20,000 个项目,找到一个东西实际上需要几个小时。
为了更清楚地说明这一点:
- 是的,我想在 Windows 资源管理器中执行此操作。
- 不,我没有重复的文件名。
- 我希望它先按名称列出,然后按日期列出。我最近才加入这家公司,他们的文件结构完全乱了套。我最近才开始添加名称为“Kellogg's Corn Flakes 1kg 2021”的文件。在此之前,它被命名为“kelloggs-corn-flakes”和“kelloggs corn flakes NEW”。 “NEW”文件可能来自 2014 年,而带连字符的文件可能来自 2016 年或 2017 年。这意味着有数千个文件没有使用合理的标准命名。
- 即使重建索引后,Windows Search 仍需要几个小时才能在那台电脑上完成,而我需要快速获得结果,因为我经常需要在一两天内发布促销材料。我做的促销活动通常每个促销活动有 100 多个项目。我之所以希望能够使用名称和日期进行排序,是因为如果我可以同时按这两个条件进行排序,那么我只需输入名称的前几个字符,就可以在详细信息视图中查看右侧的内容,并且我能够获得最新的结果作为第一个结果,而不必手动搜索文件夹才能找到我要查找的内容。
谢谢你的建议,斯科特。
答案1
首先,我假设您正在谈论文件资源管理器,以前称为 Windows 资源管理器(由 实现 explorer.exe
)。
答案是“是”又“否”。
是的,在 Explorer 的详细信息视图中,您可以像往常一样通过单击第一列(主要排序)的标题,然后按住 Ctrl 键并Shift单击第二列来按两列进行排序。
不,您要求的是不可能的,因为您无法对文件名的子字符串进行排序。如果您使用“名称”作为主排序键,Windows 将永远不会查看辅助键,因为您不能在同一个文件夹中拥有两个(或更多)具有完全相同名称的文件。
答案2
通常情况下,Windows 将保存SearchResults
文件夹。也就是说,如果您搜索“ FolderXYZ
”,然后修改“ ”的视图设置Search Results in FolderXYZ
,然后关闭它,则后续搜索“ FolderXYZ
”应该会记住您的更改。如果不是这种情况,您很可能已经达到了保存视图的最大值(限制为 5000)。视图保存在 fegistry 中。检查您是否已达到最大值的最简单方法是将此代码复制并粘贴到 电源外壳窗户:
((gp "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU").Nodeslots).count
示例输出:
PS C:\> ((gp "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU").Nodeslots).count
963
PS C:\>
如果你点击了5000
,你需要删除BagMRU
和Bag
键,这将删除所有保存的文件夹 vidws。这可以通过RegEdit
,合并.reg
文件,或者使用这个电力供应:
sl 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell'
'BagMRU', 'Bags' | Remove-Item -Recurse
如果你这样做,第一次搜索文件夹时,它应该显示SearchResults
使用系统默认视图(Content
对于大多数文件夹类型)。但您对视图设置所做的任何更改都应保存并供后续搜索使用同一文件夹。但每当第一次搜索给定路径时,它将使用默认SearchResults
相关模板FolderType
。
Base FolderType | Library LibraryFolder SearchResults OneDriveBase
=============== | ======= ============= ============= ============
Contacts | Contacts.Library Contacts.LibraryFolder Contacts.SearchResults
Documents | Documents.Library Documents.LibraryFolder Documents.SearchResults StorageProviderDocuments
Generic | Generic.Library Generic.LibraryFolder Generic.SearchResults StorageProviderGeneric
Music | Music.Library Music.LibraryFolder Music.SearchResults StorageProviderMusic
Pictures | Pictures.Library Pictures.LibraryFolder Pictures.SearchResults StorageProviderPictures
Videos | Videos.Library Videos.LibraryFolder Videos.SearchResults StorageProviderVideos
DOwnloads | DOwnloads
因此,假设视图已被保存,但您想为 SearchResults 设置自定义默认值,此代码将允许您复制已保存的视图:
### String constans
$ShellKey = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell'
$BagMRU = "$ShellKey\BagMRU"
$Bags = "$ShellKey\Bags"
$ConfirmCopy = @'
Default view set for: {0}
Based on: "{1}" ( Bag #{2} )
Key Name: {3}
'@
### Dictonary FOlderTYpeID -> FolderType.CanonicalName
$FTKey = Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes'
$FT_Lookup = $FTKey.GetSubkeyNames() | ForEach{ $hash = @{'{25CC242B-9A7C-4F51-80E0-7A2928FEBE42}'='Network'} } {
$hash.Add( $_, $FTKey.OpenSubkey($_).GetValue('CanonicalName') )
} { $hash }
$Shell = New-Object -ComObject shell.application
(Get-Item $BagMRU).Property -match '\d+' | ForEach{
Try{
[PSCustomObject]@{
'Bag' = Get-ItemPropertyValue "$BagMRU\$_" NodeSlot
'Name' = ( $Shell.NameSpace(( Get-ItemPropertyValue $BagMRU $_ ))).Title
}
} Catch {}
} | Where Name -match 'Search Results' |
Where { (Test-Path "$Bags\$($_.Bag)\Shell") -and (Get-Item "$Bags\$($_.Bag)\Shell").SubKeyCount } | ForEach{
$Splat = @{
'NotePropertyName' = 'Type'
'NotePropertyValue' = $FT_Lookup[( Get-Item "$Bags\$($_.Bag)\Shell" ).GetSubkeyNames()]
'PassThru' = $True
}
$_ | Add-Member @Splat
} | Group Name | ForEach {
[PSCustomObject]@{
'Name' = $_.Name
'Bag' = $_.Group.Bag
'Type' = $_.Group.Type | Select -Unique
}
### *** Launch GridView for folder selection ***
} | Out-GridView -PassThru | ForEach{
### Confirm copy
$Splat = @(
$_.Type
$_.Name
$_.Bag
( Copy-Item -Path "$Bags\$($_.Bag)\Shell\*" -Destination "$Bags\AllFolders\Shell" -Recurse -Force -PassThru ).Name.Replace( 'HKEY_CURRENT_USER' , 'HKCU' )
)
Write-Output ( $ConfirmCopy -f $Splat )
### Apply to existing?
If ( ( Read-Host 'Apply this template to any currenly saved views of the same type? (Y/N)' ) -match '^y') {
Get-ChildItem $Bags -Recurse -Depth 2 |
Where PSChildName -eq $Splat[3].Split('\')[-1] |
Where Name -notMatch AllFolders |
Remove-Item -Recurse -Force
}
}
您将看到一个GridView
列出已保存SearchResults
视图的控件,并允许您选择所需的视图(每种类型只有一个默认值):