objShell.Run Error: File Not Found
objShell.Run Error: File Not Found
我正在编写一个 HTA 脚本 "Opslag.hta",我想从中打开另一个 HTA 脚本 "update.hta".
我正在尝试打开 "update.hta",它位于主脚本的子文件夹(包含)中:
Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))
但是我收到错误 "File Not Found",当系统提示我是否要继续 运行 脚本并按 "Yes" "update.hta" 实际打开。
我尝试将 "update.hta" 脚本移动到不同的位置,甚至尝试在 "UpdatePath" 中指定 "update.hta" 的完整路径。我已经尝试使用 vbQuote、双反斜杠(因为 "Opslag.hta" 位于带空格的路径中)和我能找到的所有可能的解决方案,但都没有成功。
这个帖子:File not found when using objshell.run -- vbscript,不幸的是没有帮助我。
我 运行 使用 Windows 7、64 位 - 不知道这是否与它有任何关系。
我真的希望这里有人有答案,因为我快要疯了! =)
提前致谢!
嗯嗯,看来你已经找到问题的答案了。
请相关评论者post他们的回答可能是值得的,这样您就可以将其标记为已回答。
每当我使用路径时,我都会对使用相对路径产生偏执。作为一般规则,请尝试使用绝对路径名而不是相对路径。
对于您的具体示例,我们应该尝试从 Opslag.hta
导出 update.hta
的绝对路径。我们可以使用 HTML Dom 中的 document.location 来做到这一点。例如,在我的电脑上,我在 C:\Temp\HTA\Opslag.hta
下有 Opslag.hta
:
document.href
returns "file:///C:/Temp/HTA/Opslag.hta"
- 因此,需要进行一些字符串操作才能将其转换为
"C:\Temp\HTA\Opslag.hta"
- 然后我们可以使用 FileSystemObject 来提取
"C:\Temp\HTA"
文件夹。
另一个提示是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>
与您等待整个 DOM 的 HTML Document
一起工作,这通常是一个很好的做法] 加载,即将其放在 <body>
.
之后
注意:我不确定这是否真的是一个答案,但根据要求...我是这样看的:
阅读代码
Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))
有两种选择
update.hta
找不到。在这种情况下会出现错误,hta
文件将无法打开
update.hta
可以查到。在这种情况下不会有错误,hta
文件将被打开
但是 none 这些备选方案与观察到的行为相匹配。 hta
文件被打开,所以找到了。但是显示错误。由于调用者中的代码不包含任何可能导致错误的内容,因此错误的来源应该在被调用的文件中。
我正在编写一个 HTA 脚本 "Opslag.hta",我想从中打开另一个 HTA 脚本 "update.hta".
我正在尝试打开 "update.hta",它位于主脚本的子文件夹(包含)中:
Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))
但是我收到错误 "File Not Found",当系统提示我是否要继续 运行 脚本并按 "Yes" "update.hta" 实际打开。
我尝试将 "update.hta" 脚本移动到不同的位置,甚至尝试在 "UpdatePath" 中指定 "update.hta" 的完整路径。我已经尝试使用 vbQuote、双反斜杠(因为 "Opslag.hta" 位于带空格的路径中)和我能找到的所有可能的解决方案,但都没有成功。
这个帖子:File not found when using objshell.run -- vbscript,不幸的是没有帮助我。
我 运行 使用 Windows 7、64 位 - 不知道这是否与它有任何关系。
我真的希望这里有人有答案,因为我快要疯了! =)
提前致谢!
嗯嗯,看来你已经找到问题的答案了。
请相关评论者post他们的回答可能是值得的,这样您就可以将其标记为已回答。
每当我使用路径时,我都会对使用相对路径产生偏执。作为一般规则,请尝试使用绝对路径名而不是相对路径。
对于您的具体示例,我们应该尝试从 Opslag.hta
导出 update.hta
的绝对路径。我们可以使用 HTML Dom 中的 document.location 来做到这一点。例如,在我的电脑上,我在 C:\Temp\HTA\Opslag.hta
下有 Opslag.hta
:
document.href
returns"file:///C:/Temp/HTA/Opslag.hta"
- 因此,需要进行一些字符串操作才能将其转换为
"C:\Temp\HTA\Opslag.hta"
- 然后我们可以使用 FileSystemObject 来提取
"C:\Temp\HTA"
文件夹。
另一个提示是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>
与您等待整个 DOM 的 HTML Document
一起工作,这通常是一个很好的做法] 加载,即将其放在 <body>
.
注意:我不确定这是否真的是一个答案,但根据要求...我是这样看的:
阅读代码
Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))
有两种选择
update.hta
找不到。在这种情况下会出现错误,hta
文件将无法打开update.hta
可以查到。在这种情况下不会有错误,hta
文件将被打开
但是 none 这些备选方案与观察到的行为相匹配。 hta
文件被打开,所以找到了。但是显示错误。由于调用者中的代码不包含任何可能导致错误的内容,因此错误的来源应该在被调用的文件中。