客户端VBScript应用程序,当前工作目录不正确

客户端VBScript应用程序,当前工作目录不正确,vbscript,cwd,Vbscript,Cwd,我不理解这种行为。也许有人能向我解释为什么我目前的工作目录不是我所期望的 在我的桌面上,我有一个名为STKGui的文件夹: C:\Documents and Settings\Lauren\Desktop\STKGui 该目录中有以下文件:gui.html、style.css、save.html、load.html。STKGui中还有以下目录:图像、脚本和SaveData。脚本包含各种.vbs文件,包括gui.vbs 我从gui.html开始。我单击一个按钮,该按钮将引导我加载.html。loa

我不理解这种行为。也许有人能向我解释为什么我目前的工作目录不是我所期望的

在我的桌面上,我有一个名为STKGui的文件夹:

C:\Documents and Settings\Lauren\Desktop\STKGui

该目录中有以下文件:gui.html、style.css、save.html、load.html。STKGui中还有以下目录:图像、脚本和SaveData。脚本包含各种.vbs文件,包括gui.vbs

我从gui.html开始。我单击一个按钮,该按钮将引导我加载.html。load.html使用scripts\gui.vbs中的脚本。其中一个函数加载数据库,为此,我提供了数据库的位置:C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData.accdb当然,我想使用相对文件路径而不是固定路径。我初次尝试加载数据库失败;它试图从C:\Documents and Settings\Lauren\Desktop\SaveData\SaveData.accdb加载。所以为了排除故障,我打印出了当前的工作目录;令我懊恼的是C:\Documents and Settings\Lauren\Desktop

我不明白为什么我的桌面是我当前的工作目录。它不应该是文件运行的起点吗?我想可能是C:\Documents and Settings\Lauren\Desktop\STKGui(load.html的位置)或C:\Documents and Settings\Lauren\Desktop\STKGui\Scripts(gui.vbs的位置,其中包含尝试加载数据库/打印当前工作目录的调试消息的函数)

有人能解释一下为什么当前的工作目录是这样的吗?或者更好的方法是告诉我如何获得我真正想要的,即执行文件的位置?(我不在乎它是主STKGui文件夹还是脚本文件夹——只要它在应用程序的目录结构中,我就可以使用它!)


编辑(美国东部夏令时7/14/10下午4:02):

打印当前工作目录或根据我认为是执行脚本的相对路径获取文件的各种尝试都导致我的桌面路径而不是执行脚本的路径。我偶然发现了这个链接:但是没有一个解决方案适合我,因为我得到了关于Wscript对象的运行时错误。因此,虽然我不知道上述链接上的任何解决方案是否会产生不同的结果,但如果有人能帮助我至少让其中一个起作用,这样我就能发现这可能是朝着正确方向迈出的一步

其中一种解决方案,复制如下:

Set oShell = CreateObject("WScript.Shell")
Set ofso = CreateObject("Scripting.FileSystemObject")
oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)
产生以下错误:

需要对象:“Wscript”行:659字符:1

第659行为:

oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)
对于服务器端:

您应该使用
Server.MapPath()
获取“工作目录”。例如,如果您想在
C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData.accdb
中获取数据库文件的路径,您的应用程序根目录是
C:\Documents and Settings\Lauren\Desktop\STKGui
,您可以使用
Server.MapPath(“SaveData\SaveData.accdb”)

对于客户端:

在仔细检查和挖掘一些记忆后,我意识到MapPath只能从服务器类中使用。相反,您需要创建一个文件系统对象,如下所示:

''get fs object
Set objFSO = CreateObject("Scripting.FileSystemObject")
''get actual file using path relative to calling vbs file
Set objFile = objFSO.GetFile("SaveData\SaveData.accdb")
''get path to the database
set sPathToDatabase = objFSO.GetAbsolutePathName(objFile)

如果有帮助的话,这里有一个在vbScript中使用文件系统的很好的资源:

这个解决方案并不理想,但我最终做的是解析浏览器中的url以获取目录

guiPath = Mid(location.PathName, 2, len(location.PathName))

Set regExp = New RegExp
regExp.IgnoreCase = False
regExp.Global = True
regExp.Pattern = ".*/"

Set matchCollection = regExp.Execute(guiPath)

Set match = matchCollection(0)

guiPath = match.value

regExp.Pattern = "%20"

guiPath = regExp.Replace(guiPath, " ")

systemsDBPath = guiPath & "SaveData\SaveData.accdb"

就像我说的,不太理想。在我使用将要运行的应用程序时,它甚至可能无法工作。但是我找不到更好的方法。

这是客户端,而不是服务器端的东西。奇怪,我知道,但它适用于将此加载到html查看器界面中的应用程序。我在没有服务器对象的情况下尝试了它,以查看您的解决方案是否仍然适用于客户端:Set sCurPath=MapPath(“SaveData\SaveData.accdb”)document.write(“sCurPath=”&sCurPath)给了我一个错误:类型不匹配“MapPath”我以前在一个全新的变量上使用Set时从未遇到过这种困难!有什么想法吗?你能发布整个错误消息并验证行号吗?好的。只是要确保mappath线确实是有问题的线。给我一点时间,我来试试。好的。我相信我现在得到了。