2010-07-14 15 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