如何将多个文件名传递给上下文菜单Shell命令?

41

将单个文件名传递给上下文菜单的shell命令很简单:

[HKEY_CLASSES_ROOT\*\shell\MyProgram\Command]
@="program.exe %1"

但是如果我选择多个文件,program.exe将为每个选定的文件启动一次。

相反,我想只调用program.exe一次,并将当前选择的所有文件名传递给它。

如何做到这一点?


1
我已经成功地将一个项目添加到文件上下文菜单(HKEY_CLASSES_ROOT\*\shell)。当我右键单击文件时,该项目会显示出来。但是当我选择多个文件然后右键单击时,它就不会显示出来了。我该如何解决这个问题? - akinuri
3个回答

34

您可以使用发送到来实现此功能。它支持多文件。

如果此网站关闭:

使用Windows+R打开shell:sendto或将其粘贴到资源管理器地址栏中。它应该将您重定向到:

C:\Users\<yourusername>\AppData\Roaming\Microsoft\Windows\SendTo

在此文件夹中为您的程序创建一个快捷方式,您应该会在资源管理器右键单击菜单中看到它,在“发送到”下方。


3
似乎根据文件路径的不同,发送的文件数量是有限制的。我可以发送路径为 C:\test\001.txt 的504个文件。504个文件名总计7560个字符(没有空格),8063个字符(使用空格分隔)。发送505个文件(7575个字符[没有空格];8079个字符[使用空格分隔])将无法工作。 - akinuri
1
帮我节省了很多时间。我用它来比较软件...谢谢。 - Shakeer Mirza
1
当试图将文件G:\New [folder] (4)\Untitled-2.txt传递给Powershell脚本时,结果变为G:\New [folder] 4 \Untitled-2.txt。看起来括号无法被正确解析。有什么解决方法吗? - preachers
@preachers 尝试使用反引号来转义括号:G:\New [folder] \(4`)\Untitled-2.txt` - gargoylebident

8

您可能想看一下这篇文章,因为它说传递多个文件到单个实例并不是真正可行的,您必须依赖某种形式的IPC(进程间通信)。


0

使用:Command-Queuer.cmd

我想做同样的事情,最终创建了一个“包装器” .cmd/bat 文件来为我排队命令... 我使用一个临时队列文件来:(a) 自我提名控制实例来运行进程,和 (b) 向其他实例发出信号,不要直接运行命令,而是将它们的文件/参数添加到队列中并退出。脚本等待 X 秒钟让其他实例排队他们的信息,然后按顺序处理选定的文件。

Command-Queuer.cmd
------------------

@ECHO OFF
SETLOCAL

:: SETUP PARAMETERS: Control temp file location and delay before running
SET QueueFile="%TEMP%\Multi-Item-Queue.txt"
SET /A Secs=5

:: MAIN PROGRAM: If the first instance create the queue and wait, otherwise transfer to queue and exit
IF EXIST %QueueFile% ( ECHO %* >> %QueueFile% ) ELSE (
    ECHO %* > %QueueFile%
    ECHO Waiting %Secs% seconds for other files to finish queuing then will activate...
    TIMEOUT /T %Secs% /NOBREAK >nul
    
    REM - ADD YOUR CODE HERE TO PROCESS THE QUEUE FILE AS A WHOLE
    REM - Example: Display popup of all file paths selected: Msg %username% <%QueueFile%
    
    REM - ALTERNATIVELY, ITERATE THROUGH EACH LINE OF THE FILE
    REM - Example: FOR /F "tokens=*" %%Z in (%QueueFile%) DO ( COPY %%Z "C:\Backup" )
    
    :: Delete the queue file when finished
    DEL %QueueFile%
)
GOTO:EOF

注意:每选择一个文件,您将看到一个空的cmd窗口出现一瞬间,即如果您选择30个文件,则会短暂地出现30个cmd窗口,但如果需要,这些窗口可以隐藏,请查看:以完全隐藏的方式运行批处理文件(superuser.com)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接