Посмотрите здесь. Я не проверял, но похоже, что решение, которое вы хотите - хоть и хак-у.
Отформатированный как мог, уценка не нравится, e.
Системная оболочка для Windows Vista была специально создана Microsoft, чтобы ...
- Когда файлы различных типов выбираются одновременно, опция их открытия становится недоступной для системной оболочки, будь то через их контекстное меню или клавиатуру (т. Е. Нажатием {Enter}). Это регулируется расширениями файлов, а не программой, обрабатывающей файлы (например, это происходит при одновременном выборе файлов * .doc и * .docx).
- Если выбрано более 15 (т. Е. 16 или более) файлов одного типа, происходит одно и то же событие.
Это задокументировано Заком Робинсоном, старшим разработчиком Microsoft. Вот обходной путь, который решает обе проблемы и помещает решение в контекстное меню.
Для этого требуется только создать сценарий Visual Basic и создать ярлык для него в папке «Отправить».
Создайте или загрузите (переименуйте его расширение в * .vbs) скрипт, прикрепленный к этому сообщению (код приведен ниже).
Создайте ярлык к нему и поместите ярлык в папку «Отправить». Если вы не можете найти папку «Отправить», нажмите Windows+R и запустите «shell:sendto».
Теперь, когда вы щелкнете правой кнопкой мыши по файлу или файлам, при выборе (например) записи 0_file_execution
в списке «Отправить» откроются все выбранные файлы.
Непосредственный запуск сценария вместо передачи его файлов в качестве аргументов из элемента списка «Отправить» позволяет установить время, которое отделяет открытие каждого файла; если вы установите это значение слишком низким, Vista может не открыть все файлы.
Код:
on error resume next
nl=vbcrlf
wait=200
set shell=wscript.createobject("wscript.shell")
set filesystem=createobject("scripting.filesystemobject")
set scriptfile=filesystem.getfile(wscript.scriptfullname)
stamp=scriptfile.datelastmodified
stamparray=split(year(stamp)&"."&month(stamp)&"."&day(stamp)&"."&hour(stamp)&"."&minute(stamp)&"."&second(stamp),".")
version=stamparray(0)
for loopversion=1to ubound(stamparray)
versionlength=len(stamparray(loopversion))
if versionlength<2 then stamparray(loopversion)=string(2-versionlength,"0")&stamparray(loopversion)
version=version&"."&stamparray(loopversion)
next
set contents=filesystem.opentextfile(wscript.scriptfullname,1)
contents=split(contents.readall,nl)
unit=4^5
set files=wscript.arguments
if files.count<1 then
do
wait=inputbox(nl&nl&"Set a period, in milliseconds, to wait while files open:",filesystem.getbasename(scriptfile)&" v"&version&" : "&int(scriptfile.size/unit)&"k"&(scriptfile.size/unit-int(scriptfile.size/unit))*unit&"b : "&ubound(contents)&" lines",wait)
if wait=empty then wscript.quit
if isnumeric(wait) then exit do
loop
set scriptfile=filesystem.createtextfile(wscript.scriptfullname)
for loopcontents=0to ubound(contents)
newline=contents(loopcontents)
if instr(newline,"wait=")>0 and isnumeric(replace(newline,"wait=","")) then newline="wait="&wait
scriptfile.write(newline)
if loopcontents<ubound(contents) then scriptfile.write(nl)
next
else
for each file in files
shell.run """"&file&""""
wscript.sleep wait
next
end if