- ·上一篇文章:常用vbs集合.
- ·下一篇文章:VBS算24点
- ·百度中搜索更多的关于“vbs命令行参数”相关内容
- ·谷歌中搜索更多的关于“vbs命令行参数”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
vbs命令行参数
用过 DOS 的人一定知道 DOS 的命令有一个特征:当我们不知道这个命令用来干什么的或者不知道它的具体用法,可以在这个命令后加上 /?,这样就可以查询到这个命令的用法了。当然这要求程序是这样设计的,有些不标准的 DOS 程序是不支持 /? 查询用法的。用过的人对于参数的作用自然是不言而喻,这里不再罗嗦,总之如果有一个语言无法获得命令行参数,那么可以说它的实用性很差!
到了 Windows,我们很少需要敲命令行了,但是这个被成为 CommandLine 的东西还是一直存在。举个例子,我们双击 C:\boot.ini,虽然看不到命令行,但其实 Shell 程序 Explorer.exe 悄悄地调用了,notepad.exe,然后把 C:\boot.ini 做为参数传递给它,整个命令行是 "%SystemRoot%\system32\notepad.exe" C:\boot.ini。到了 notepad.exe 进程里,它解析了这个命令行,知道用户想打开的文件是 C:\boot.ini,于是它就打开了这个文件。
Explorer.exe 是从注册表得知 ini 文件应该调用 notepad.exe 来打开的,具体我们可以在 HKEY_CLASSES_ROOT\.ini 看到默认关联到 inifile,然后在 HKEY_CLASSES_ROOT\inifile\shell\open\command 下可以看到 %SystemRoot%\system32\NOTEPAD.EXE %1。这里的 %1 就是指 .ini 文件的路径名,如果路径是像 C:\Program Files 这样带有空格的,则加了引号,防止被当成 C:\Program 和 Files 两个参数了。
Win32 程序可以调用 GetCommandLineW 这个 API 来或者完整的命令行,然后用 CommandLineToArgvW 来解析参数。而 WSH 是不能直接调用 Win32 API 的,所以当然不能这样做,不过它提供了更方便的方法来获得命令行参数。
首先从注册表来看实现的基础,比如说 VBS 程序,注册表里有 HKEY_CLASSES_ROOT\.VBS 关联到 VBSFile,而 HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command 的默认键的值是 %SystemRoot%\System32\WScript.exe "%1" %*。关键就在最后的 %*,它表示可能还有任意个参数。对于 VBS 程序来说,它的第 0 参数(也就是它自身路径名)是 WScript.exe 的第 1 参数,以此类推,所以在资源管理器的拖放过程中 VBS 的参数是靠这个 %* 取得的,当然如果没有这个只是拖放的时候无效,直接打命令行还是可以的。
开始写代码吧,从最简单的检查参数个数开始,JS 版就不写了,把下面一行保存为 ArgumentsCount.VBS:
MsgBox WScript.Arguments.Count
直接双击 Arguments.VBS 的话,会现实 0,如果拖一个文件放在它上面则显示 1,拖 N 个文件放在它上面则显示 N。如果我们编辑一下注册表,把上面说的 %* 去掉,则无论怎么拖放都是显示 0。
再来写一个显示参数的,ShowArguments.VBS:
Dim szBuf, i
i = 0
For Each Arg In WScript.Arguments
i = i + 1
szBuf = szBuf & "参数" & i & vbTab & Arg & vbCrLf
Next
MsgBox szBuf, vbInformation, WScript.Arguments.Count

