首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在赋值中使用Set时需要的对象

在赋值中使用Set时需要的对象
EN

Stack Overflow用户
提问于 2014-05-13 14:10:00
回答 3查看 33.2K关注 0票数 15
代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2014-05-13 15:45:18

更新 由于尚不清楚,所以最好指出您的Object Required问题是由于以下行设置scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs“ 这是因为需要一个对象,但是您要为它分配一个字符串,通过删除Set,您的代码将工作(就像Ekkehard.Hornerpointed out一样)。

下面是我对形势的解释。首先,查看您的代码,它看起来几乎是将WScript.Shell对象的实例化与.Run()方法的命令行混合在一起。这是我第一次尝试分解代码,重新排列,然后把它重新组合在一起。

原始答案

  1. 您的Set scmd应该实例化WScript.Shell (正如Ekkehard.Horner指出的,您可以一次性引用Server.CreateObject("WScript.Shell").Run,但我不推荐)。
  2. .Run()应该由实例化的scmd对象执行,并传递命令行执行。

这里有一个例子,我已经重命名了一些变量(例如,scmdcmd )。

代码语言:javascript
复制
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

要考虑的事情

在经典ASP中使用WScript.Shell运行可执行文件时,需要考虑一些问题;

  1. Run命令将使用当前的Application标识执行。
  2. Run将在服务器上执行可执行文件,而不是在客户端(服务器端)。
票数 14
EN

Stack Overflow用户

发布于 2014-05-13 17:21:10

作为

代码语言:javascript
复制
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf

证明,根本没有任何规则或法律规定“您的Set scmd应该实例化WScript.Shell”。将命令放在字符串变量scmd (或者更好的sCmd)中执行,而不是为只使用一次的值创建变量是很好的做法。

修改后的版本(减去愚蠢的一组):

代码语言:javascript
复制
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的版本一样好用。

把所有事情都拼出来的

  1. Set关键字、其语义和错误消息都是设计缺陷,使VBScript更难正确使用。"site:stackoverflow.com vbscript "object required" Set"的结果是1500个点击量。即使大部分的点击与"Set x = 'non-object'的错误无关,这显然是太多了。要解释/原谅这些简易爆炸装置,你必须考虑到基本是一种石器时代的语言。
  2. 学习VBScript的人有权两次对"Set x = 'non-object'的错误感到惊讶。如果这种情况发生得很频繁(或者更频繁),他/她应该感到羞愧(并保持沉默)。最重要的是,这个问题不应该污染这个网站。
  3. 当我发帖时,除了亚历克斯·K.的“删除片场”之外,所有的答案/评论都强调/集中在了.Run的声明上;有一个答案被称为“漫不经心的曲线”,一个答案甚至重复了这种暴行。因此,我试图指出,确实存在一个错误:伪集。
  4. 我不幸地失败了。证据:约翰·桑德斯( John )将标题从"VBScript错误“(非具体但真实)更改为”在调用Run on Wscript.Shell时所需的对象“(具体但错误),Lankymart从事心理/语言学研究,以牺牲字符串来保存集合。
  5. 我唯一的希望是:每一个读到这篇文章的人都会对我在片场上的唠叨感到厌恶,以至于从现在起她/他在打字时会三思而后行:

wtf

代码语言:javascript
复制
Set x = "     ---- stop or be damned!!!
Set x = obj.getNumber() + 4  ---- oh no!!!
  1. 一切都没有结果-- Same mistake again
票数 0
EN

Stack Overflow用户

发布于 2014-05-13 14:13:54

我不确定,试试换衣服吧

代码语言:javascript
复制
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"

代码语言:javascript
复制
Set scmd = "c:\windows\system32\cscript.exe" //nologo "c:\s.vbs"
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23633643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档