2012-02-16 25 views
1

使用Windows XP,我创建了一个批处理文件,该文件以两个文件作为参数,现在我想向特定扩展名添加文件类型操作“compare”。 “.txt”用两个选定文件调用批处理文件。这是我想选择两个“.txt”文件,然后从shell上下文菜单中选择“比较”,并让它执行这两个文件的批处理文件。将两个文件传递给一个Windows文件类型动作

我可以很容易地将“比较”动作添加到“文本文档”文件类型中,并选择带有两个参数的批处理文件,例如, “C:\ batch.bat”“%1”“%2”(顺便说一句:这可以在cmd和其他程序中正常工作,例如Git difftool),但如果我选择2个文件并尝试比较它们,Windows会打开两个单独的两个选定文件中的每一个的实例,而不是比较它们。

我检查谷歌和所以,但找不到任何参考如何获取文件作为参数传递给文件类型的行动。谢谢!

回答

2

此问题是重复的。 在此讨论: How to pass in multiple file/folder paths via a right-click event (verb) to an executable?

这里: How to add new items to right-click event on Folders and Files in Windows?

,类似于超级用户这个没有答案的问题: Creating Context Menu Item For Multiple Files

简而言之,当你选择2个文件,然后选择一个来自上下文菜单的动作(windows shell说法中的“动词”),除非应用程序检查它是否已在运行,否则Windows将始终打开2个独立实例。然后诀窍是在你的应用程序(在我的情况下是批处理文件)中包含一个可执行的替代方法。这可以通过使用Interprocess Communication (IPC)(例如Dynamic Data Exchange (DDE))作为Factor Mystic和Remy Lebeau - TeamB指出。因素Mystic也列出了一些很好的MSDN参考资料。还有一个快速和肮脏的方式建议由低级使用SendTo。

这里是我的快速和肮脏的方式:

@ECHO off 
SETLOCAL 
IF NOT EXIST C:\file.tmp (
    ECHO %1 > C:\file.tmp 
) ELSE (
    FOR /F "TOKENS=*" %%A IN (C:\file.tmp) DO (
     DEL C:\file.tmp 
     C:\BATCH %1 %%A 
    ) 
) 
SETLOCAL 

这是我使用的文件类型的动作“动词”应用程序,只需要一个变量。我没有使用DDE,因为我将第一个文件缓存在驱动器上。然后从第一个调用真正的应用程序(BATCH),一旦我有两个文件。很显然,当调用几个奇怪的文件时它会遇到问题,但就像我说的那样快速和肮脏。

无论如何,我正在关闭这个,因为我相信如何解决这个问题的方法是非常丰富的。

+0

+1回答自己的问题,然后采取后续行动与我们的其他人共享的答案! – technomalogical 2012-03-02 17:48:17

0

我为每个进程所做的工作是接收文件路径并将其保存到另一个文件中,例如“Community”,然后检查是否存在像“flag”这样的标志文件,如果不存在,则表示它是第一个进程检查标志并且是执行所有功能的进程,在这种情况下,该进程创建文件标志以向其他进程指示完成它们,然后活动进程读取所有的路径文件“社区”。

我希望能帮助你,因为我的英语对不起......

+0

私人提供代码/帮助不是这个网站应该如何工作 - 该配置文件是唯一发布您的联系信息的地方:-) – kleopatra 2013-07-13 08:43:51

相关问题