1

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

在我的桌面上,我有一个名为 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 文件夹还是脚本文件夹——只要它在应用程序的目录结构中,我就可以使用它!)


编辑(美国东部时间 2010 年 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 字符:1

第 659 行是:

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

2 回答 2

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/

于 2010-07-14T17:39:00.230 回答
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"

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

于 2010-07-21T15:50:15.713 回答