objShell.Run错误:找不到文件

时间:2015-06-21 09:10:43

标签: vbscript hta

我正在编写HTA脚本" Opslag.hta" ,我想从中打开另一个HTA脚本" update.hta&# 34;

我试图打开" update.hta" ,它位于主脚本的子文件夹(include)中:

Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))

但是我收到错误"找不到文件" ,当我提示是否要继续运行脚本并按& #34;是" " update.hta" 实际打开。

我试图移动" update.hta"脚本到不同的位置,甚至试图指定" update.hta"的完整路径。在" UpdatePath"。我尝试过使用 vbQuote ,双反斜杠(因为" Opslag.hta"位于带空格的路径中)和我能找到的所有可能的解决方案,没有成功。

这个帖子:File not found when using objshell.run -- vbscript,不幸的是没有帮助我。

我在Windows 7,64位上运行 - 不知道这与它有什么关系。

我真的希望有人在这里有答案,因为我要疯了! =)

提前谢谢!

2 个答案:

答案 0 :(得分:1)

嗯,好像你已经得到了问题的答案。

要求相关的评论者发布他们的答案以便您将其标记为已回答,这可能是值得的。

每当我使用路径时,我都会对使用相对路径感到偏执。作为一般规则,尝试使用绝对路径名而不是相对路径。

对于您的具体示例,我们应尝试从update.hta派生Opslag.hta的绝对路径。我们可以使用HTML Dom中的document.location来完成此操作。例如,在我的计算机上,Opslag.hta下有C:\Temp\HTA\Opslag.hta

  1. document.href返回"file:///C:/Temp/HTA/Opslag.hta"
  2. 因此,需要进行一些字符串操作才能将其转换为"C:\Temp\HTA\Opslag.hta"
  3. 然后我们可以使用FileSystemObject来提取"C:\Temp\HTA"文件夹。
  4. 另一个提示是Chr(34)与""""相同。通常,如果要在VBScript中转义双引号,则使用一对双引号。例如如果您希望John says: "Hello!"作为VBScript字符串,那么它是"John says: ""Hello!"""

    以下是说明结果的示例代码:

    <!DOCTYPE html>
    <head>
    <title>Opslag.hta test</title>
    </head>
    <body>
    </body>
    <script language="VBScript">
    Set objShell = CreateObject("WScript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    htaPath = Replace(Replace(document.location, "file:///", ""), "/", "\")
    htaFolder = objFSO.GetParentFolderName(htaPath)
    updatePath = htaFolder + "\include\update.hta"
    MsgBox updatePath
    objShell.Run """" & updatePath & """"
    </script>
    </html>
    
    顺便说一下,这只是一个例子。我通常不会在<script>之后放置大型脚本<body>但是,如果<script>HTML Document一起使用,等待整个<body>,这通常是一种很好的做法。要加载的DOM,即将其放在==之后。

答案 1 :(得分:0)

注意:我不确定这是一个真正的答案,但是根据要求...这就是我看到它的方式:

阅读代码

Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))

有两种选择

    找不到
  1. update.hta。在这种情况下,将出现错误,并且不会打开hta文件
  2. 可以找到
  3. update.hta。在这种情况下,将不会出现错误,并且将打开hta文件
  4. 但是这些替代方案都没有与观察到的行为相匹配。 hta文件已打开,因此找到了。但是显示错误。由于调用者中的代码不包含任何可能导致错误的内容,因此错误的来源应该在被调用的文件中。