Обновление
Я отредактировал hkcr\vbsfile\shell
, чтобы оно отражало hkcr\vbsfile\shell
. Аргументы все еще не работают при использовании ассоциации типов файлов для VBScript.
Интересно, не сработают ли эти ключи реестра:
:: reg query hkcr /f vbs*
HKEY_CLASSES_ROOT\.vbs
...
HKEY_CLASSES_ROOT\VBS
HKEY_CLASSES_ROOT\VBS Author
HKEY_CLASSES_ROOT\VBScript
HKEY_CLASSES_ROOT\VBScript Author
HKEY_CLASSES_ROOT\VBScript.Encode
HKEY_CLASSES_ROOT\VBScript.RegExp
HKEY_CLASSES_ROOT\VBSFile
HKEY_CLASSES_ROOT\VBSFile.HostEncode
Suchvorgang abgeschlossen: 21 übereinstimmende Zeichenfolge(n) gefunden.
Я не могу переименовать HKEY_CLASSES_ROOT\VBS
или HKEY_CLASSES_ROOT\VBScript
, даже при запуске regedit
в качестве администратора.
:: reg query hkcr\vbs /s
HKEY_CLASSES_ROOT\vbs\CLSID
(Standard) REG_SZ {B54F3741-5B07-11cf-A4B0-00AA004A55E8}
HKEY_CLASSES_ROOT\vbs\OLEScript
(Standard) REG_NONE
:: reg query hkcr\vbscript /s
HKEY_CLASSES_ROOT\vbscript
(Standard) REG_SZ VB Script Language
HKEY_CLASSES_ROOT\vbscript\CLSID
(Standard) REG_SZ {B54F3741-5B07-11cf-A4B0-00AA004A55E8}
HKEY_CLASSES_ROOT\vbscript\OLEScript
(Standard) REG_NONE
:: reg query hkcr\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8} /s
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}
(Standard) REG_SZ VB Script Language
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\
Implemented Categories
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\
Implemented Categories\{F0B7A1A1-9847-11CF-8F20-00805F2CD064}
(Standard) REG_NONE
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\
Implemented Categories\{F0B7A1A2-9847-11CF-8F20-00805F2CD064}
(Standard) REG_NONE
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\InprocServer32
(Standard) REG_SZ C:\Windows\SysWOW64\vbscript.dll
ThreadingModel REG_SZ Both
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\OLEScript
(Standard) REG_NONE
HKEY_CLASSES_ROOT\clsid\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\ProgID
(Standard) REG_SZ VBScript
Оригинальный пост
Скрипты не получают аргументы, переданные им через командную строку, когда вызываются через сопоставление типов файлов вместо cscript.exe
или wscript.exe
.
:: type args.vbs
Option Explicit
WScript.Echo WScript.Arguments.Count
Dim arg
For Each arg In WScript.Arguments
WScript.Echo arg
Next
:: cscript args.vbs eins zwei drei
3
eins
zwei
drei
:: wscript args.vbs eins zwei drei
:: : same thing via the MessageBox
:: args.vbs eins zwei drei
0
:: : Why is that?
:: assoc .vbs
.vbs=VBSFile
:: ftype VBSFile
VBSFile="%SystemRoot%\System32\WScript.exe" "%1" %*
Похоже, эта ассоциация типов файлов передает все аргументы скрипту. Но, может быть, это не используется? Как я могу отследить это? Вот больше информации из реестра:
:: reg query hkcr\.vbs
HKEY_CLASSES_ROOT\.vbs
(Standard) REG_SZ VBSFile
HKEY_CLASSES_ROOT\.vbs\PersistentHandler
:: reg query hkcr\VBSFile\Shell\Open /s
HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
(Standard) REG_EXPAND_SZ "%SystemRoot%\System32\WScript.exe" "%1" %*
:: reg query hkcr\VBSFile\Shell\Open2 /s
HKEY_CLASSES_ROOT\VBSFile\Shell\Open2
(Standard) REG_EXPAND_SZ Open &with Command Prompt
MUIVerb REG_EXPAND_SZ @%SystemRoot%\System32\wshext.dll,-4511
HKEY_CLASSES_ROOT\VBSFile\Shell\Open2\Command
(Standard) REG_EXPAND_SZ "%SystemRoot%\System32\CScript.exe" "%1" %*
Это Windows 7 Pro 64, если это имеет значение (что я не думаю, что это имеет значение). Еще одна вещь: аргументы работают корректно во всех трех случаях (cscript.exe
, wscript.exe
, сопоставление типов файлов) с использованием механизма JScript со следующим скриптом:
var argc = WScript.Arguments.Length;
WScript.Echo(argc);
for (var i = 0; i < argc; i++)
WScript.Echo( WScript.Arguments(i) );
Настройки:
:: assoc .js
.js=JSFile
:: ftype JSFile
JSFile=C:\Windows\System32\WScript.exe "%1" %*
:: reg query hkcr\jsfile\shell\open\command
HKEY_CLASSES_ROOT\jsfile\shell\open\command
(Standard) REG_SZ C:\Windows\System32\WScript.exe "%1" %*
:: reg query hkcr\jsfile\shell\open2\command
HKEY_CLASSES_ROOT\jsfile\shell\open2\command
(Standard) REG_SZ C:\Windows\System32\CScript.exe "%1" %*