Изменение значения столбца "Рейтинг" в проводнике для произвольных типов файлов
По сути, у меня есть большой набор различных носителей (текст, изображения, флэш-файлы, архивы, папки и т. Д.), И я пытаюсь организовать их.
В проводнике Windows есть столбец с оценкой, но, похоже, нет способа изменить рейтинг файлов, не открывая их в программном обеспечении для конкретного типа (например, медиаплеер или программа просмотра фотографий). Однако это не работает, когда файл имеет неподдерживаемый тип (.rar,.swf...) или каталог.
Я был бы более чем готов рассмотреть замену файлового менеджера (я уже рассмотрел довольно много, Directory Opus, Total Commander и т. Д.) Или даже решение, которое хранит метаданные рейтинга в скрытом файле. в каждой папке или отдельной базе данных. Единственное реальное критическое требование - это возможность сортировки по рейтингу и независимость от типов файлов.
В принципе, есть ли способ классифицировать большую коллекцию отсортированных файлов по рейтингу, которая будет работать с любым типом файлов, включая каталоги?
-
В идеале был бы простой способ добавить произвольные столбцы в проводник Windows и редактировать их напрямую. Тем не менее, кажется, нет никакого способа сделать это. Рейтинговая колонка - следующая лучшая вещь.
Что бы это ни стоило, на данный момент я более или менее разочаровался в поиске того, что может сделать то, что я ищу, как описано в вопросе. Сейчас я в основном использую специализированное python webapp для управления большим количеством моего медиа контента (это отличный способ научиться веб-программированию).
9 ответов
Я сделал действительно крошечную программу в AutoHotKey, которая делает то, что вы хотите.
Он отображает файлы и папки, и есть столбец рейтинга, который можно щелкнуть, чтобы установить оценку от 0 до 5. Он отображает "-", если файл еще не был оценен. Вы можете нажать на заголовки столбцов для сортировки. Дважды щелкните папку, чтобы перейти в нее, или файл, чтобы открыть ее.
Данные хранятся в INI-файле в том же каталоге, что и программа.
Вы можете скачать бинарный файл здесь: rater.exe ( зеркало)
И источник (на языке AutoHotKey): rater.ahk ( зеркало)
Столбец рейтинга в Windows показывает метаданные рейтинга, найденные в медиафайлах; Windows не поддерживает эти данные сама. Вы можете отредактировать его, щелкнув правой кнопкой мыши файл, выбрав "Свойства", а затем выбрав вкладку "Детали".
,
В случае файлов, не относящихся к медиафайлам (rar, swf), метаданные оценки отсутствуют, поэтому у Windows нет возможности показать или отредактировать эту информацию, поэтому вам определенно потребуется другое программное обеспечение, чтобы сделать это за вас.
Вы можете использовать встроенные функции Проводника , чтобы добавить свойство к папкам (каталогам) файловой системы без использования стороннего программного обеспечения, посредством редактирования файла и реестра.
Для изменения записей HKLM, которые устанавливают сопоставление свойств ->, требуется разрешение администратора, но это однократная настройка для каждого компьютера. Для нормальной работы не требуется никаких специальных разрешений.
Соответствующий ключ реестра:
-
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DesktopIniPropertyMap\PropertySetStorage
где подраздел{F29F85E0-4FF9-1068-AB91-08002B27B3D9}
это
FMTID
набора свойств сводной информации COM и подраздела6
указываетPropertyID
изSystem.Comment
внутри набора. Значение под этим ключом указывает соответствующую запись, определяющуюSection
,Key
(имя значения) иVarType
. Итак.reg
файл для связи с пользовательским файлом:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DesktopIniPropertyMap\PropertySetStorage\{64440492-4C8B-11D1-8B70-080036B11A03}\9]
"Key"="Rating"
"Section"="Custom"
; 0x17 = 23 = VT_UINT
"VarType"=dword:00000017
Соответствующая запись в папкеdesktop.ini
файл будет:
[Custom]
Rating=75
ОнSystem.Rating
документация дает целочисленный диапазон для каждого значения звезды:
и это все, что нужно для того, чтобы папки имелиRating
свойство, которое можно отобразить в проводнике .
Но не очень практично создавать/редактировать файл Desktop.ini папки вручную каждый раз, когда вы хотите установить/изменить рейтинг папки. Но с помощью дополнительной магии реестра и сценария PowerShell вы можете создавать записи контекстного меню для автоматизации задачи.
Следующий код представляет собой универсальный сценарий для создания сопоставления свойств, записей контекстного меню, сценария времени выполнения и вспомогательных файлов.
Его должен запустить пользователь с правами администратора в консоли администратора PowerShell:
### Global Values ###
Clear-Host
echo @'
To install this script, even for a single user, you must have Admin permissions
and run this code in an Admin PowerShell window. This is due to the need to create
the property mapping entries under HKLM.
But the context menu entries and file location can be created for machine-wide
use or only for the user running this script.
Do you wish to install this script for all users or just the currently logged-in user?
'@
Do {} Until ((Read-Host 'A(ll users) or C(urrent user)') -match 'a|c')
$Drive = If ($Matches[0] -eq 'a') {'HKLM:'} ELse {'HKCU:'}
$Null = Read-Host @'
If you're installing this script for all users, be sure to select a file location
where all users have at least read permissions, such as the folders uner
"C:\Users\Public".
:--- Press <Enter> to continue ---
'@
$BrowseRoot = If ( $Drive -eq 'HKLM:' ) {"shell:Public"} Else {"shell:UsersFilesFolder"}
$ScriptFiles = (New-Object -com shell.application).BrowseForFolder(0,"Script files location",0x50,$BrowseRoot).Self.Path
echo ('Script files will be created in "{0}"...' -f $ScriptFiles)
### Registry entries creation ###
echo 'Creating registry entries...'
####### Property Mapping ###
$IniPropMap = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DesktopIniPropertyMap\PropertySetStorage'
$RatingMap = "$IniPropMap\{64440492-4C8B-11D1-8B70-080036B11A03}\9"
Set-ItemProperty (mkdir $RatingMap -Force).PSPath -InputObject ([PSCustomObject]@{
'Key' = 'Rating'
'Section' = 'Custom'
'VarType' = 0x17
})
####### Context menu entries ###
########### Set Rating ###
$TopKeys = @( (Join-Path $Drive 'SOFTWARE\Classes\Directory\Background\Shell\RateFolder') ,
(Join-Path $Drive 'SOFTWARE\Classes\Directory\Shell\RateFolder') )
$Ratings = @( 0 , 1 , 25 , 50 , 75 , 99 )
Set-ItemProperty (mkdir $TopKeys -Force).PSPath -InputObject ([PSCustomObject]@{
'MUIVerb' = 'Set Rating'
'Position' = 'Top'
'SeparatorBefore' = ''
'SubCommands' = ''
})
Set-ItemProperty $TopKeys 'Icon' '%SystemRoot%\system32\imageres.dll,-1024' -Type ExpandString
0..5 | %{
$splat = @{
'Name' = 'MuiVerb'
'Value' = If ($_) {'★' * $_} Else {'(None)'}
'Type' = 'ExpandString'
}
Set-ItemProperty (mkdir (Join-Path $TopKeys "Shell\$_") -Force).PSPath @splat | out-null
$splat = @{
'Name' = '(Default)'
'Value' = ('"{0}\AddProp.bat" "{2}%V{2}" {1} Rating' -f $ScriptFiles , $Ratings[$_] , "'")
'Type' = 'String'
}
Set-ItemProperty (mkdir (Join-Path $TopKeys "Shell\$_\Command") -Force).PSPath @splat | out-null
}
########### Add Comment ###
$TopKeys = @( (Join-Path $Drive 'SOFTWARE\Classes\Directory\Background\Shell\AddComment') ,
(Join-Path $Drive 'SOFTWARE\Classes\Directory\Shell\AddComment') )
Set-ItemProperty (mkdir $TopKeys -Force).PSPath -InputObject ([PSCustomObject]@{
'MUIVerb' = 'Add Comment'
'Position' = 'Top'
'SeparatorAfter' = ''
})
$splat = @{
'Name' = '(Default)'
'Value' = ('powershell.exe -NoProfile -Command "{0}\Set-FolderProps.ps1" "{1}%V{1}" Comment' -f $ScriptFiles , "'")
'Type' = 'String'
}
Set-ItemProperty (mkdir (Join-Path $TopKeys 'Command') -Force).PSPath @splat
### Set-FolderProps.dll creation ###
###
### Compiled Add-Type to access/wrap the APIs:
### - ShowWindow() - https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
### - WritePrivateProfileString() - https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-writeprivateprofilestringa
### - SHGetSetFolderCustomSettings() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetsetfoldercustomsettings
###
### Exposed Functions:
### - [API]::ShowWindow(hWnd,nCmdShow)
### - [Desktop.ini]::SetInfoTip(FolderPath,InfoTip)
### - [Desktop.ini]::GetInfoTip(FolderPath)
### - [Desktop.ini]::SetRating (FolderPath,Rating)
echo 'Creating "Set-FolderProps.dll"...'
Add-Type @'
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
public class API {
public enum SW : int {
Hide = 0,
Normal = 1,
ShowMinimized = 2,
Maximize = 3,
ShowNoActivate = 4,
Show = 5,
Minimize = 6,
ShowMinNoActive = 7,
ShowNA = 8,
Restore = 9,
Showdefault = 10,
Forceminimize = 11
}
[DllImport("user32.dll")]
public static extern int ShowWindow(IntPtr hwnd, SW nCmdShow);
}
namespace Desktop {
public class ini {
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool WritePrivateProfileString(
[MarshalAs(UnmanagedType.LPWStr)] string lpAppName,
[MarshalAs(UnmanagedType.LPWStr)] string lpKeyName,
[MarshalAs(UnmanagedType.LPWStr)] string lpString,
[MarshalAs(UnmanagedType.LPWStr)] string lpFileName );
[DllImport("shell32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
static extern int SHGetSetFolderCustomSettings(
SHFolderCustomSettings pSettings,
[MarshalAs(UnmanagedType.LPWStr)]
string pszPath,
FCS dwReadWrite);
[StructLayout(LayoutKind.Sequential)]
public class SHFolderCustomSettings {
public int Size;
public FCSM Mask;
public IntPtr pvid;
public IntPtr pszWebViewTemplate;
public int cchWebViewTemplate;
public IntPtr pszWebViewTemplateVersion;
public IntPtr pInfoTip;
public int ccInfoTip;
public IntPtr pclsid;
public int dwFlags;
public IntPtr pszIconFile;
public int cchIconFile;
public int iIconIndex;
public IntPtr pszLogo;
public int cchLogo;
}
public static int SetInfoTip ( string FolderPath,
string InfoTip ) {
SHFolderCustomSettings
MySettings = new SHFolderCustomSettings();
MySettings.Size = Marshal.SizeOf(MySettings);
MySettings.Mask = FCSM.INFOTIP;
MySettings.pInfoTip = Marshal.StringToHGlobalUni( InfoTip );
MySettings.ccInfoTip = 0;
int Result = SHGetSetFolderCustomSettings( MySettings,
FolderPath,
FCS.FORCEWRITE );
Marshal.FreeHGlobal( MySettings.pInfoTip );
return Result;
}
public static string GetInfoTip ( string FolderPath ) {
SHFolderCustomSettings
MySettings = new SHFolderCustomSettings();
MySettings.Size = Marshal.SizeOf(MySettings);
MySettings.Mask = FCSM.INFOTIP;
MySettings.pInfoTip = Marshal.AllocHGlobal(1024);
MySettings.ccInfoTip = 1024 / 2 ;
int Result = SHGetSetFolderCustomSettings( MySettings,
FolderPath,
FCS.READ );
string InfoTip = "";
if ( Result == 0 )
{
InfoTip = Marshal.PtrToStringUni( MySettings.pInfoTip );
}
else
{
InfoTip = "";
}
Marshal.FreeHGlobal( MySettings.pInfoTip );
return InfoTip;
}
public static void SetRating ( string FolderPath,
int Rating )
{
DirectoryInfo dir = new DirectoryInfo(FolderPath);
AddItem ( FolderPath,
@"Custom",
@"Rating",
Rating.ToString() );
dir.Attributes |= FileAttributes.ReadOnly;
}
public static bool AddItem ( string FolderPath,
string Section,
string KeyName,
string Value )
{
string IniFilePath = Path.Combine(FolderPath, @"desktop.ini");
bool Return = WritePrivateProfileString( Section,
KeyName,
Value,
IniFilePath );
File.SetAttributes( IniFilePath,
( FileAttributes.Hidden |
FileAttributes.System |
FileAttributes.Archive ));
return Return;
}
public static int SetNone ( string FolderPath ) {
SHFolderCustomSettings
MySettings = new SHFolderCustomSettings();
MySettings.Size = Marshal.SizeOf(MySettings);
MySettings.Mask = FCSM.NONE;
int Result = SHGetSetFolderCustomSettings( MySettings,
FolderPath,
FCS.FORCEWRITE );
return Result;
}
private enum FCS : uint {
READ = 0x00000001,
FORCEWRITE = 0X00000002,
WRITE = 0X00000003,
}
[FlagsAttribute]
public enum FCSM : uint {
NONE = 0x00000000,
VIEWID = 0x00000001,
WEBVIEWTEMPLATE = 0x00000002,
INFOTIP = 0x00000004,
CLSID = 0x00000008,
ICONFILE = 0x00000010,
LOGO = 0x00000020,
FLAGS = 0x00000040
}
}
}
'@ -OutputAssembly "$ScriptFiles\Set-FolderProps.dll"
### Set-FolderProps.ps1 cration ###
### Script file as Here-String written
### to $ScrptFiles folder selected by user
echo 'Creating "Set-FolderProps.ps1"...'
@'
Add-Type -Path "{0}\Set-FolderProps.dll"
$ThisWindow = [System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle
Switch ($Args[-1]) {
'Rating'
{
[API]::ShowWindow($ThisWindow ,'Hide') | out-null
$return = [Desktop.ini]::SetRating($Args[0],[Int]$Args[1])
$Return = [Desktop.ini]::SetInfoTip($Args[0],([Desktop.ini]::GetInfoTip($Args[0])))
@((New-Object -com shell.application).Windows()).Foreach({ $_.Refresh() })
}
'Comment'
{
[API]::ShowWindow($ThisWindow ,'Show') | out-null
$Comment = Read-Host Comment
[API]::ShowWindow($ThisWindow ,'Hide') | out-null
$return = [Desktop.ini]::SetInfoTip($Args[0],$Comment)
@((New-Object -com shell.application).Windows()).Foreach({ $_.Refresh() })
}
}
'@ -replace ('\{0\}',$ScriptFiles) | Set-Content "$ScriptFiles\Set-FolderProps.ps1"
### AddProp.bat cration ###
### Wrapper to hide PowerShell window flash
echo 'Creating "AddProp.bat"...'
@'
:: Batch wrappoer to hide PowerShell window
cmd /c start /min "" powershell.exe -NoProfile -Command "{0}\Set-FolderProps.ps1" %1 %2 %3
:: Troubleshooting
:: powershell.exe -NoExit -NoProfile -Command "{0}\Set-FolderProps.ps1" '%1' %2 %3
::Usage: SetProp.bat %V <PropertyValue>[Rating|Comment]
'@ -f $ScriptFiles | Set-Content "$ScriptFIles\AddProp.bat"
echo 'Done!'
Я искал решение этой проблемы с папками " Рейтинг" и "Пометка" в Windows 7. Во время недавнего поиска я нашел ваш вопрос, а позже нашел этот полезный инструмент. Taggtool.
Он также может помечать / оценивать папки, как файлы. и вы можете искать на основе этих тегов. Я начал использовать этот инструмент и очень эффективно организовывал мою огромную коллекцию документов, изображений, видео и других типов.
Попробуйте это здесь: http://www.taggtool.com/.
Не забудьте " Запуск от имени администратора " во время выполнения установки, так как для этого требуются разрешения для доступа к файловой системе. Вы также можете увеличить размер шрифта в настройках, как только вы установили систему
Была такая же проблема только сейчас, и это работало отлично: после того, как вы перейдете на вкладку "Подробности" в "Свойствах", в нижней части окна есть ссылка "Удалить свойства и личную информацию". Нажмите на это и выберите "Удалить следующие свойства из этого файла" (опции вверху). Затем установите флажок Рейтинг и нажмите "ОК".
Лучшее, что я нашел, - это внешняя программа под названием XnView http://www.xnview.com/ она бесплатна для личного использования. Yoy может оценивать папки и файлы и задавать цвет, я обнаружил одну ошибку (но решаемую), которая заключается в том, что если диск с классифицированным материалом меняет имя устройства (G: F: и т. Д.), Классификации исчезают. Решение состоит в том, чтобы использовать функцию "Описание", вместо этого вы можете поместить туда число (или нужную вам цифру), данные дозы сохраняются в файле в том же каталоге секретных данных (что очень полезно и независимо от того, какой компьютер вы используете)
Я использовал тег и некоторые специальные символы ■, которые распознаются проводником, по крайней мере, для файлов, которые я использую (офис). Не идеально, но делает трюк для меня
Я имел в виду, что вы можете использовать несколько символов, чтобы "оценить" ваш файл ■ ■ ■ ■ ■ v хорошо ■ ■ ■ ■ хорошо и т. Д...
Вот что работает на Win7:
в вашей папке щелкните правой кнопкой мыши -> Сортировать по -> Еще...
Затем перейдите к "Рейтинг" и установите флажок.
Это просто. В проводнике Windows сначала нажмите "Упорядочить" и отобразите панель сведений. Затем щелкните файл, в котором отображается атрибут столбца рейтинга (может потребоваться сначала включить столбец рейтинга). В нижней части окна также отображаются звезды рейтинга. Дважды щелкните по звездному рейтингу, который вы хотите присвоить. Появится кнопка сохранения, затем нажмите "Сохранить", и она обновит атрибут рейтинга для этого файла.
Обратите внимание, что если файл в данный момент заблокирован, например, если файл открыт в другой программе, например, в музыкальном проигрывателе, вы не сможете изменить метаданные файла.