2011-03-09 63 views
2

當用戶右鍵單擊文件類型時,我可以獲得批處理文件以運行。我怎樣才能做到這一點,使每個突出顯示的組只有一個實例運行,並獲取所有文件作爲參數。 當用戶「shift點擊」時,它目前每個文件運行單個實例將多個文件複製到一個批處理文件中(使用資源管理器高亮顯示)

有很可能有更好的方式來說出這個...你可以看到爲什麼我有麻煩搜索它。

感謝

回答

3

如果您創建一個批處理文件並將其放置在桌面上,那麼您可以選擇多個文件並將其放在該批處理文件中。它們將作爲多個參數傳遞給文件。

例如,假設你把dropped.bat您的桌面上,它看起來像這樣:

@echo off 
echo %* 
pause 

現在,假設你有三個文件xyz,如果你多選擇它們並丟棄它們dropped.bat,你會看到一個命令窗口想出這個文本是:

C:\Users\alavinio\Desktop\x C:\Users\alavinio\Desktop\y C:\Users\alavinio\Desktop\z 
Press any key to continue . . . 

這是你能得到的最接近的一次。右鍵單擊和打開語義期望爲每個選定的項目啓動一個新的可執行文件,通常這些可執行文件會檢查自己的另一個實例,並且如果他們看到一個,則將該參數發送到該現有進程並終止自己。實際上,您可以通過任務管理器或Process Explorer查看發生的情況。

+0

我不知道%*。將它與'SHIFT'命令結合起來,你可能會想出一個解決方法。 – 2011-03-10 14:45:33

+0

@Philip Kelley:'%*'不能與'SHIFT'組合,'SHIFT'隻影響%1,%2 ...%n,但不會影響%* – jeb 2011-03-11 11:21:00

+0

,但是謝謝,我喜歡拖並下降.....我很可能會去那 – jtzero 2011-03-14 13:31:01

1

它的工作方式似乎已經由外殼上你強加的,而且似乎沒有要解決這個簡單的方法。

某些應用程序會添加自己的菜單項,從而允許應用程序以不同的方式調用(即只對組調用一次),從一般情況下(對每個選定項目重複執行),另一個應用API檢查自己的存在,並將「開放」請求重定向到其正在運行的副本。

批處理文件不適用於其中之一。你可能需要一個不同的工具。即使你想通過批處理文件完成主要工作,仍然需要調用批處理文件來處理項目列表。

3

通常一個文件關聯,多選的調用將啓動一個程序的多個實例,程序本身必須處理它自身(或使用DDE的幫助或IDropTarget

這是要很努力在一個批處理文件來實現這一點,這個例子應該讓你開始:

@echo off 
setlocal ENABLEEXTENSIONS 
set guid=e786496d-1b2e-4a49-87b7-eb325c8cc64d 
set id=%RANDOM% 
FOR /F "tokens=1,2,3 delims=.,:/\ " %%A IN ("%TIME%") DO SET id=%id%%%A%%B%%C 
set sizeprev=0 

>>"%temp%\%guid%.lock" echo %id% 
>>"%temp%\%guid%.list" echo %~1 

:waitmore 
>nul ping -n 3 localhost 
FOR %%A IN (%temp%\%guid%.list) DO set sizenow=%%~zA 
if not "%sizeprev%"=="%sizenow%" (
    set sizeprev=%sizenow% 
    goto waitmore 
) 
FOR /F %%A IN (%temp%\%guid%.lock) DO (
    if not "%%A"=="%id%" goto :EOF 
    FOR /F "tokens=*" %%B IN (%temp%\%guid%.list) DO (
     echo.FILE=%%B 
    ) 
    del "%temp%\%guid%.list" 
    del "%temp%\%guid%.lock" 
    pause 
) 

雖然這個工作,它是一個可怕可怕的黑客,將根本無法運行,如果你不等待第一套在開始對另一組文件進行新操作之前要解析的文件。

+0

哇....很酷!但不幸的是,我不會成爲唯一一個使用它的人。如果我是唯一的人,那麼我會選擇這個。 – jtzero 2011-03-14 13:29:29

0

我猜你有一組突出顯示的文件,並且你想爲每個文件運行一些程序。

@echo off 
for %%A in (%*) do echo %%A 
pause 
1

晚會晚了,但這裏是我的2美分。嘗試自定義「移動到Dropbox文件夾...」上下文菜單命令的行爲時,我遇到了同樣的問題。我需要將每個選定的文件傳送到一個批處理文件來處理一個實例中的處理。

經過一番挖掘,我發現Context Menu Launcher

足夠簡單的使用。我彈出singleinstance.exeC:\Windows\system32並創建並運行類似於下面的.reg文件。

Windows Registry Editor Version 5.00 

; Documents 

[HKEY_CLASSES_ROOT\SystemFileAssociations\document\Shell\Dropbox] 
@="Move to Dropbox Folder" 
"Icon"="%SystemRoot%//system32//imageres.dll,-112" 
"MultiSelectModel"="Player" 

[HKEY_CLASSES_ROOT\SystemFileAssociations\document\Shell\Dropbox\command] 
@="singleinstance.exe \"%1\" \"C:\\Move to Dropbox Folder.bat\" $files --si-timeout 400" 
相關問題