Windows 7 文件夹上下文菜单 - *如果*文件夹包含某些文件类型

Windows 7 文件夹上下文菜单 - *如果*文件夹包含某些文件类型

我想在文件夹的上下文菜单中添加一个条目,但只让它显示在上下文菜单中如果有问题的文件夹包含特定类型的文件(在这种情况下,仅当文件夹包含 .avi 文件时)。这可能吗?

我确信我至少看到过一个程序,它的上下文菜单项只显示在某些文件夹中 - 尽管我无论如何也想不起来它是什么。

答案1

我知道这是一个老话题,但由于谷歌上没有太多关于这个主题的内容......我想补充一点......主要是这只是对 harrymc 提到的内容的补充,但也许这会对那些不太熟悉注册表编辑的人有所帮助......

首先,实际上有大量的 API 方法可用系统对象上面提到过。例如,除了 ItemName,您还可以检查 System.FileName(对我来说效果更好)或系统.ItemFolderPathDisplay...

其次,搜索语法有些复杂,但实际上为您提供了很多选择。您可以在 AppliesTo 测试中使用标准 DOS 通配符(例如,“?”表示正好 1 个字符,“*”表示 0 个或多个字符)。您可以对名称使用各种运算符……例如相等、不相等、包含、以...开头、以...结尾等。您可以使用“AND”或“OR”关键字将多个条件串在一起(或使用“NOT”)。似乎您甚至可以执行某种 SQL 式的搜索语法,但我无法通过注册表让它们本地运行(我可能只是语法错误……不确定)。

3) 虽然我还没有找到所提问题的答案,但以下注册表脚本显示了如何根据文件夹名称和位置显示或隐藏上下文菜单项。我只是让它弹出命令提示符,但您可以轻松更改为其他任何内容。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\# Ends With '_mydata']
"AppliesTo"="System.FileName:\"*_mydata\""

[HKEY_CLASSES_ROOT\Folder\shell\# Ends With '_mydata'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]']
"AppliesTo"="System.ItemFolderPathDisplay:~< \"C:\\[VIDEOS]\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]' AND ends with '_mydata']
"AppliesTo"="System.FileName:\"*_mydata\" AND System.ItemFolderPathDisplay:~<\"C:\\\""

[HKEY_CLASSES_ROOT\Folder\shell\# Starts with 'C:-slash-[Videos]' AND ends with '_mydata'\command]
@="C:\\Windows\\System32\\cmd.exe /k cd /d \"%1\""

答案2

当然可以编写一个上下文菜单处理程序,只有目录中存在某些文件时,其条目才会显示在菜单中。上下文菜单处理程序是一个可以自由决定是否显示的程序,尽管这可能会减慢文件夹上下文菜单的显示速度。

Windows 中实现此目的的唯一通用机制是 Windows Search 高级查询语法。Windows 7 中的一项新功能是为静态上下文菜单项添加了“AppliesTo”值。这允许根据AQS 查询

在此例子,DefaultAppliesTo 值使此动词成为文件名中包含单词“exampleText1”的任何文件的默认动词。AppliesTo 值使此动词对名称中包含“exampleText1”的任何文件都有效。HasLUAShield 值显示名称中包含“exampleText2”的文件的盾牌。

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

由于 AQs 没有很好的记录,我无法找到查询文件夹内容的语法。

答案3

文件菜单工具将允许您执行此操作,至少在其自己的上下文菜单中。

相关内容