我必须处理vbs脚本。我不得不承认,我只有c#经验而且没有关于以下内容的线索,从我的观点来看,更多的是SysAdmin Powerhell VBS脚本。
这里或一般情况下“说”是什么意思? vbcrlf似乎是某种常量,它将光标放在新行的开头?
say(vbcrlf)
say("Some text...")
ws.Run "C:\whatever.exe /PACK-* /SEND /Q", , True
say(vbcrlf)
这里的ws.run任务是什么?刚刚启动并运行scsript.exe?
set ws = CreateObject("Wscript.Shell")
if ucase(right(wscript.fullname,11)) = "WSCRIPT.EXE" then
task = "cscript.exe " & chr(34) & wscript.scriptfullname & chr(34)
ws.run task
wscript.quit
end if
感谢您提供任何帮助!
编辑:
问题是脚本在XP上像魅力一样运行,但在Win7上运行不是。我认为它必须与路径中的空间有关。 这是我正在处理的确切路径。我需要用额外的双引号括起来,还是chr(34)要走的路?
ws.Run "C:\Program Files (x86)\whatever.exe /PACK-* /SEND /Q", , True
编辑:
好的,我知道了 - >
ws.Run """C:\Program Files (x86)\whatever.exe"" /PACK-* /SEND /Q", , True
答案 0 :(得分:1)
vbCrLf
是一个预定义的字符串常量,由回车符和换行符组成:
>> WScript.Echo Asc(vbCrLf), Asc(Right(vbCrLf, 1))
>>
13 10
say
不是原生VBScript;它必须是用户定义的Sub:
>> Sub say(x) : WScript.Echo x : End Sub
>> say "pipapo"
>>
pipapo
(示例中的参数列表()违反规则:调用Sub时不要使用参数列表()
.Run
是WScript.Shell对象的方法(函数);它执行/运行外部进程。在您的示例中,它使用(作为Sub)使用* c * script.exe主机(而不是* w * script.exe)重新启动脚本
请参阅WshShell object,.Run method
<强> P.S。强>
如果使用.Run(或.exec),最好将第一个/ strCommand参数构建到变量中,以便从命令提示符进行检查和测试。 “无意义地创建一个变量以使用额外的内存,减慢脚本速度,并使脚本更难以阅读”的论点在粘土取代石头进行信息存储后不久就已经过时了。
答案 1 :(得分:0)
'Connects to COM object WScript.Shell
set ws = CreateObject("Wscript.Shell")
'Testing what script engine is running the script, if the GUI one then do the following. wscript object is always available in wscript/cscript run scripts
if ucase(right(wscript.fullname,11)) = "WSCRIPT.EXE" then
'Pointlessly create a variable to use extra memory, slow down the script, and to make script harder to read
task = "cscript.exe " & chr(34) & wscript.scriptfullname & chr(34)
'Run the current script in the console version of the scripting host
ws.run task
'quits the script leaving the console version to run
wscript.quit
end if