【问题标题】:Trying to "Include" a .ASP file in a .VBS file试图在 .VBS 文件中“包含”一个 .ASP 文件
【发布时间】:2014-04-02 19:55:56
【问题描述】:

我有一个 .VBS 文件,它通过我的服务器上的计划任务运行。我在我的网站上的 .ASP 文件中有一些数据,我想将这些数据提取到该 .VBS 文件中,这样我就不需要在两个地方复制相同的信息。

这是 ASP 文件中的数据示例:

<%
If MyVar = "1" Then
    Data1 = "this"
    Data2 = "that"
Else 
    Data1 = "hi"
    Data2 = "there"
End If
%>

这可能吗?我想我记得一些关于 ExecuteGlobal 的事情,但不能把它们放在一起——如果这实际上可以帮助的话。

【问题讨论】:

  • 我就是这么想的。所以我只是去掉 然后我可以 ExecuteGlobal 剩下的文本,然后我就可以访问变量了吗?上面的示例数据。谢谢!

标签: vbscript asp-classic


【解决方案1】:

ExecuteGlobal ValidVBSCode 是在 W/CScript 托管脚本中重用/导入/包含 VBScript 代码 的简单方法。 ASP代码的问题是“”,所以你必须预处理.Readall()加载的代码

当您提到“.ASP 文件中的数据”时,另一种方法可能是将文件 .ReadAll() 作为文本并解析 将信息转换为合适的(可能是复杂的)变量。

如果您需要更多帮助,请发布一个小而有代表性的文件样本以“包含”。

演示脚本(针对给定的示例):

Option Explicit

Dim sASP : sASP = Join(Array( _
     " <% If MyVar = ""1"" Then" _
   , "       Data1 = ""this""" _
   , "       Data2 = ""that""" _
   , "   Else" _
   , "       Data1 = ""hi""" _
   , "       Data2 = ""there""" _
   , "   End If %>" _
), vbCrLf)
WScript.Echo sASP

Dim sExpr : sExpr = Replace(Replace(sASP, "<%", ""), "%>", "")
WScript.Echo sExpr
Dim MyVar, Data1, Data2
For Each MyVar In Split("1 2")
    ExecuteGlobal sExpr
    WScript.Echo myVar, Data1, Data2
Next

输出:

cscript 22821687.vbs
 <% If MyVar = "1" Then
       Data1 = "this"
       Data2 = "that"
   Else
       Data1 = "hi"
       Data2 = "there"
   End If %>
  If MyVar = "1" Then
       Data1 = "this"
       Data2 = "that"
   Else
       Data1 = "hi"
       Data2 = "there"
   End If
1 this that
2 hi there

更新 wrt 到 cmets 和 @Dennis 的演示代码:

我错误地假设(基于 w/cscript 拒绝它们)“”会导致问题。正如 Dennis 的代码所展示的(以及我的“阅读后”测试证实), Execute(Global) 可以很好地处理它们;不需要替换。 (所以我认为丹尼斯的回答值得称赞。)

【讨论】:

  • 问题 - ASP 文件的导入在哪里?还是使用 FSO 进行 ReadAll 调用的地方?另外,不确定我是否理解拆分。非常感谢您的帮助 - 非常感谢!
  • 是的,这个答案的问题在于它省略了实际可能很困难的步骤:导入 .asp 文件的内容。 “如何从另一个文件导入数据?” “好吧,一旦你有了数据,你就可以使用它了。”
  • @Martha - 这就是我提到 .ReadAll() 两次的原因。此外:旧约明确询问了 ExecuteGlobal 及其用途。我的烦恼:我对“”的担心是错误的。
  • 谢谢大家。我确实在有和没有替换的情况下再次测试了该代码,它确实有效。所以,它是不​​需要的。感谢您帮助我找到一种将 ASP 文件包含在 VBS 文件中的方法!
【解决方案2】:

搞定了!这是一个示例代码。感谢您的帮助!

MyVar = "2"
Sub Import(ByVal strFile)
   Set objFs = CreateObject("Scripting.FileSystemObject")
   Set objFile = objFs.OpenTextFile(strFile)
   strCode = objFile.ReadAll
   objFile.Close
   ExecuteGlobal(strCode)
End Sub
Import "E:\path\test.asp"
msgbox(Data1)

响应是“嗨”。

【讨论】:

  • 为什么我的工作答案被否决了?此外,我通过电子邮件发送的 cmets 均未显示在此线程上。奇数。
  • 这个元线程将为您提供必要的上下文,丹尼斯。当另一个答案大大提供了解决方案时,我个人将我的工作解决方案添加为“社区维基”答案,您可能对此感兴趣。 meta.stackexchange.com/questions/228219/…
  • 猜想有人决定删除它们,个人不同意我宁愿让我的 cmets 一个人呆着,或者至少通知我。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2011-07-17
相关资源
最近更新 更多