Решение:
Вы можете определить раздел реестра для вызова сценария с использованием ссылки href в качестве аргумента:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\test]
"URL Protocol"=""
@="URL:test Protocol"
[HKEY_CLASSES_ROOT\test\shell]
[HKEY_CLASSES_ROOT\test\shell\open]
[HKEY_CLASSES_ROOT\test\shell\open\command]
@="\"C:\\Windows\\Your-Script.bat\" %1"
И затем использовать JScript в вашем Script.bat для разделения и декодирования URI:
@if (@This==@IsBatch) @then
wscript //E:JScript "%~dpnx0" %1
exit /b
@end
WScript.CreateObject("WScript.Shell").Run("explorer.exe " + decodeURIComponent(WScript.arguments(0).split("test:")[1]));
WScript.Quit(0);
Это запустит приложение по умолчанию и откроет ваш файл.
===================== ================================================== ======
Вы можете использовать простые javascript функции вместо странного пакетного анализа для любых ваших потребностей, например, я заменяю все слэши на обратную косую черту в моем скрипте. Вы также можете определить свой ключ reg с пользовательским протоколом в качестве аргумента и использовать его для разделения.
строка файла reg:
@="\"C:\\Windows\\Your-Script.bat\" %test:% %1"
script:
@if (@This==@IsBatch) @then
wscript //E:JScript "%~dpnx0" %*
exit /b
@end
WScript.CreateObject("WScript.Shell").Run("explorer.exe " + decodeURIComponent(WScript.arguments(1).split(WScript.arguments(0))[1]));
WScript.Quit(0);
Вы могли бы даже сделать это без жесткого кодирования вашего протокола или предоставления его в качестве аргумента, если поместить путь к файлу ссылки между запятыми:
<a href="test:,C:test.txt,">Open</a>
с:
@="\"C:\\Windows\\Your-Script.bat\" %2"
и в Ваш скрипт:
wscript //E:JScript "%~dpnx0" %2
===================================== ================================
Ваш файл должен открываться в программном обеспечении по умолчанию в любом веб-браузере Вы можете использовать sh.
Если вы хотите, чтобы ваш браузер перестал запрашивать разрешение на выполнение скрипта каждый раз (Chrome / Edge), вы можете запустить этот reg-файл:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
Будет отображаться флажок «запомнить».