VBS脚本中使用连字符

发布时间:2019-10-25编辑:脚本学堂
VBS脚本中使用连字符

许多脚本和程序语言在向文本输入的时候并不严格的遵守文本的行。例如,尽管下面这个JS 脚 本写了很多行,但是,JS 把它当做一行来处理。这是因为,在大部分的时候,JS 只有看到中止符的时候才认为使一个行的中止。在这个例子中,中止符就是“;”。在实际中敲入的行是和脚本本身不相关的。
var
objWMI
=new
Enumerator
(GetObject("winmgmts:")
.
InstancesOf("Win32_process"))
;

正好相反,同样的一段代码,用 VB 写的时候就会报一个语法错误。
Set
objWMI
=
(GetObject("winmgmts:")
.
InstancesOf("Win32_process"))

这是因为,VBS用回车键来代替特定的中止符。为了中止一个VB脚本,你不需要来敲入一个分号或者其它的特殊的符号,你只需要敲回车键就好了。一般来讲,不用中止符的限制,使VBS 在编写的过程中变的简单,但是也有一点会有些复杂。为了增强程序的可读性,建议每行的最大长度不超过80个字符。那么当你的一行代码中有 100 个字符,怎么办呢?尽管看来好象有个很简单的解决办法,但是你不能用回车键来将一行代码分隔成很多行。例如下面的代码会返回一个 VB 运行错误因为它用回车键来分隔脚本
strMessageToDisplay = strUserFirstName, strUserMiddleInitial, strUserLastName,
strCurrentStatus
Wscript.Echo strMessageToDisplay

你不能用回车建来换行,因为在 VB 中它认为回车是代表一段代码的中止,在上面的代码中,它认为第一行是脚本的第一部分陈述内容。然后认为第二行是另外一部分陈述内容。这样因为 strCurrentStatus 不是一个VBS的命令,所以就报错了。为了解决这个问题,VB 脚本用下划线来表示下面一行是上面一行的代替。在 VB 的早期修订版本中,在第一行末尾加一个空格和一个下划线来表示第二行是第一行的继续。为更明确的表明这个意思,第二行前面要加四个空格。(这样作是为了可读,你其实不必在继续的行前作特定的标识──就是不用在第二行前加四个空格。)

strMessageToDisplay = strUserFirstName, strUserMiddleInitial, strUserLastName, strCurrentStatus _
Wscript.Echo strMessageToDisplay

当继续的行又引号的时候,它就显的特别复杂。例如,架设你用下划线和空格来分隔一个 WMI脚本:
Set colServiceList = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Service _
WHERE State = 'Stopped' AND StartMode = 'Auto' ")

如果你运行这个脚本,它会弹出一个错误,因为继续换行符放在了引号中间了,这样它就认为换行符是字符串的一部分。为了分隔这个陈述:
1:在第一行用引号中止,然后插入空格和下划线
2:用 and(&)符号来开始下一行,这表示第二行是第一行字符串的继续
3:在下一行开始之前加入引号 这些引号表示这些陈述是包涵在上面的一行中的,没有了引号,它就VB就解释 Win32_Service 是 VB 的陈述语句,因为这个语句不是合法的,所以就产生了错误。修正的版本如下:
Set colServiceList = GetObject("winmgmts:").ExecQuery("SELECT * FROM " _
& "Win32_Service WHERE State = 'Stopped' AND StartMode = 'Auto' ")

用这个办法来换行的时候,在适当的位置插入空格要十分小心。在上面的例子当中,空格是添加在“from”之后和下一行的引号之前,如果空格向作偏出,那么字符串会被错位的解释(你看 如果将 FROM 和 Win32_Service 连在一起)会像如下的错误:
" SELECT * FROMWin32_Service WHERE State = 'Stopped' AND StartMode = 'Auto' 。