2010-07-14 72 views
1

我不理解此行为。也许有人可以向我解释为什么我目前的工作目录不符合我的期望。客户端VBScript应用程序,错误的当前工作目录

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

C:

位于该目录\的Documents and Settings \劳伦\桌面\ STKGui有下列文件:gui.html,风格。 css,save.html,load.html在STKGui中还有以下目录:图像,脚本和保存数据。脚本包含各种.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文件夹或脚本文件夹 - 只要它是应用程序的目录结构中我可以使用它!)


EDIT(10年7月14日4: 02pm EDT):

根据我执行的脚本的相对路径,打印当前工作目录或抓取文件的各种尝试都导致我的桌面路径而不是执行脚本的路径。我偶然发现了这个链接: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字符:1

与线659的存在:

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

回答

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" 

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

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只能从服务器类。相反,你需要创建一个文件系统对象是这样的:

''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/

+0

这是客户端,而不是服务器端的东西。奇怪,我知道,但它是一个应用程序,将它加载到它的接口在HTML浏览器中。 – Lauren 2010-07-14 17:51:14

+0

我试了一下没有服务器对象,以确定您的解决方案将仍然是客户端的工作: 设置sCurPath =的MapPath(“保存数据\ SaveData.accdb”) 文件撰写(“sCurPath =”&sCurPath) 给我一个错误:类型不匹配'MapPath'我以前从来没有这样的困难,当我使用一个全新的变量设置!有任何想法吗? – Lauren 2010-07-14 17:59:25

+0

您可以发布整个错误消息并验证行号吗? – 2010-07-14 18:04:09

相关问题