Windows 资源管理器 - 从上下文菜单中区分两个文件?

lee*_*d00 19 windows diff windows-explorer

有没有办法从 Windows 资源管理器的上下文菜单中区分两个选定的文件?

Joh*_*n T 18

听起来你需要diff-ext

这个 shell 扩展 (diff-ext) 可以为同一目录中的 2 或 3 个文件(取决于工具)启动文件比较工具或“保存”一个文件以供以后比较。它充当比较工具的外部最近使用 (MRU) 文件列表。

我将它与KDiff3一起使用,但页面上还有许多其他差异工具可以使用。

替代文字


小智 8

这是我添加右键单击上下文菜单条目以运行自定义命令(如调用 Meld)并区分两个文件的解决方案。

背景 简单的上下文菜单条目可以很容易地添加到 Windows 寄存器 (regedit) 中:手动或通过创建 .reg 文件(参见下面的示例)。

问题是将为您选择的每个文件运行该命令。有以下三种解决方案可以解决这个问题:

  1. 使用 Shell 扩展(复杂)
  2. 确保您的应用程序捕获不同的调用(复杂)
  3. 使用singleinstance.exe上下文菜单句柄(简单)。该程序为您执行选项 2。它从被调用的不同时间收集参数,然后将这些参数传递给您想要的命令。超时选项可用于帮助收集要收集的呼叫。点击链接了解更多信息。

步骤 1context-menu-handler下载 singleinstance.exe (感谢作者,我与他无关)

第 2 步(用于文件和文件夹比较):创建一个扩展名为“.reg”的文件,内容如下(Meld with an Icon):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\DiffIt_Files]
@="Diff it!"
"Icon"="C:\\Program Files (x86)\\Meld\\Meld.exe"

[HKEY_CLASSES_ROOT\*\shell\DiffIt_Files\command]
@="\"c:\\Bin\\singleinstance.exe\" \"%1\" \"C:\\Program Files (x86)\\Meld\\Meld.exe\" $files --si-timeout 400"
   
[HKEY_CLASSES_ROOT\Folder\shell\DiffIt_Folders] 
@="Diff It!" 
"Icon"="C:\\Program Files (x86)\\Meld\\Meld.exe"

[HKEY_CLASSES_ROOT\Folder\shell\DiffIt_Folders\command]    
@="\"c:\\Bin\\singleinstance.exe\" \"%1\" \"C:\\Program Files (x86)\\Meld\\Meld.exe\" $files --si-timeout 400"
Run Code Online (Sandbox Code Playgroud)

reg 文件创建了一个标记为“Diff It!”的上下文菜单条目。对于所有文件 ( *) 和文件夹 ( Folder)。Icon如果您不需要图标,可以删除包含 的行。

调整程序的路径singleinstance.exe和命令运行(这里C:\Program Files (x86)\Meld\Meld.exe。注意退格和引号的转义

步骤 3运行.reg文件。如果您是管理员,双击它可能会起作用。否则,在您的文件夹中打开管理员命令提示符(在资源管理器中:文件>打开命令>以管理员身份打开命令。或Alt-F-M-A)。只需键入.reg文件名即可将其添加到注册表中。

就是这样。

(卸载)您可以手动删除注册表中的键或创建一个.reg包含以下内容的文件:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\*\shell\DiffIt_Files]

[-HKEY_CLASSES_ROOT\Folder\shell\DiffIt_Folders] 
Run Code Online (Sandbox Code Playgroud)

替代使用软件添加-编辑-删除上下文菜单条目,如 ContextEdit(但不能轻松添加图标)。在这种情况下,您不需要对斜杠和引号进行转义,因此命令如下所示:

"c:\Bin\singleinstance.exe "%1" "C:\Program Files (x86)\Meld\Meld.exe" $files --si-timeout 400
Run Code Online (Sandbox Code Playgroud)