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

2sbarzqh  于 2023-05-18  发布在  Shell
关注(0)|答案(3)|浏览(121)

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

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

但如果我选择多个文件,program.exe将为 * 每个 * 这样的选定文件调用。
我想做的是只调用program.exe一次,将当前选择的所有文件名传递给它。
如何做到这一点?

cgh8pdjw

cgh8pdjw1#

你可以使用Send To来实现。它支持多个文件。
如果这个网站离线:
Windows + R打开shell:sendto或将其粘贴到您的资源管理器地址栏中。它应该将您重定向到:
C:\Users\<yourusername>\AppData\Roaming\Microsoft\Windows\SendTo
在此文件夹中创建程序的快捷方式,您应该在资源管理器右键单击菜单中的Send to中看到它

nkhmeac6

nkhmeac62#

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

fd3cxomn

fd3cxomn3#

用途:Command-Queuer.cmd

我也想做同样的事情,最后创建了一个'wrapper' .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窗口将短暂出现,但这些可以隐藏,如果需要请检查:Run a batch file in a completely hidden way (superuser.com)

相关问题