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

时间:2010-07-14 17:34:56

标签: vbscript cwd

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

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

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

位于该目录中的是以下文件:gui.html,style.css,save.html,load.html在STKGui中还有以下目录:Images,Scripts和SaveData。脚本包含各种.vbs文件,包括gui.vbs。

我从gui.html开始。我点击一个按钮将我带到load.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日下午4:02):

根据我的想法打印当前工作目录或抓取文件的各种尝试是我执行脚本的相对路径导致我的桌面路径而不是执行脚本的路径。我偶然发现了这个链接:http://leereid.wordpress.com/2008/03/19/vbscript-current-directory-or-folder/但是没有一个解决方案适合我,因为我得到了关于Wscript对象的运行时错误。因此,虽然我不知道上述链接中的任何解决方案是否会产生不同的结果,但如果有人可以帮助我至少让其中一个解决方案工作,那么我可以发现这可能是朝着正确方向迈出的一步。

其中一个解决方案,转载如下:

Set oShell = CreateObject("WScript.Shell")
Set ofso = CreateObject("Scripting.FileSystemObject")
oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)

产生以下错误:

需要对象:'Wscript'行:659 char:1

第659行:

oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)

2 个答案:

答案 0 :(得分:2)

对于服务器端:

您应该使用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只能从Server类中获得。相反,您需要创建一个这样的文件系统对象:

''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中使用文件系统的一个很好的资源:http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/filesfolders/files/

答案 1 :(得分:0)

这个解决方案并不理想,但我最终做的是解析浏览器中的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"
像我说的那样,不太理想。一旦我使用了将要运行的应用程序,它甚至可能无法工作。但我找不到更好的方法。