call main()
sub main()
Dim scmd
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.shell").run scmd,0,false
end sub
它给了我错误:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
答案 0 :(得分:13)
<强>更新强>
由于不清楚是否最好指出您的
Object Required
问题归因于此行Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
这是因为预期会有一个对象,但是您要为其分配一个字符串,方法是删除代码可以使用的
Set
(因为Ekkehard.Horner有pointed out)。
以下是我对情况的解释。首先看一下你的代码,它看起来好像已经将
WScript.Shell
对象的实例化与.Run()
方法的命令行混合在了一起。这是我第一次尝试分解代码,重新排列然后将其重新组合在一起。
原始答案
您的Set scmd
应该实例化WScript.Shell
(作为Ekkehard.Horner指出您可以使用Server.CreateObject("WScript.Shell").Run
作为一次性参考,但我不会推荐它)。
.Run()
应由实例化的scmd
对象执行,并传递命令行以执行。
以下是我重命名了一些变量的示例(例如scmd
到cmd
)。
Call main()
Sub main()
'Renamed variables to cmd is your object and cmdline is your file path.
Dim cmd, cmdline
'Instantiate WshShell object
Set cmd = Server.Createobject("WScript.Shell")
'Set cmdline variable to file path
cmdline = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
'Execute Run and return immediately
Call cmd.Run(cmdline, 0, False)
End Sub
需要考虑的事项
在Classic ASP中使用WScript.Shell运行可执行文件时,需要考虑一些事项;
运行命令将使用当前的应用程序池标识执行。
运行将在服务器上执行不在客户端(服务器端)的可执行文件。
答案 1 :(得分:0)
作为
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf
证明,“你的Set scmd
应该实例化WScript.Shell”没有任何规则或法律。将命令放在字符串变量scmd(或者更好的sCmd)中执行,而不是为只使用过一次的值创建变量是良好的做法。
修订版(减去愚蠢的Set):
call main()
sub main()
Dim scmd
scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.shell").run scmd,0,false
end sub
将与Lankymart的版本一样好用。
拼出所有内容:
"site:stackoverflow.com vbscript "object required" Set"
导致1500次点击。即使这些点击中的大部分与"Set x = 'non-object'
失误无关,但这显然太多了。为了解释/原谅那些简易爆炸装置你必须考虑到BASIC是一种石器时代的语言。"Set x = 'non-object'
错误两次感到惊讶。如果它发生三次(或更频繁),他/她应该感到羞耻(并保持沉默)。最重要的是,这个问题不应该污染这个网站。WTF
Set x = " ---- stop or be damned!!!
Set x = obj.getNumber() + 4 ---- oh no!!!
答案 2 :(得分:-3)
我不确定,请尝试更改
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
到
Set scmd = "c:\windows\system32\cscript.exe" //nologo "c:\s.vbs"