1

私はこの行動を理解していません。私の現在の作業ディレクトリが私が期待するものではない理由を誰かが説明してくれるかもしれません。

私のデスクトップには、STKGui というフォルダーがあります。

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

そのディレクトリには、次のファイルがあります: gui.html、style.css、save.html、load.html STKGui 内には、次のディレクトリもあります: Images、Scripts、および SaveData。スクリプトには、gui.vbs を含むさまざまな .vbs ファイルが含まれています。

gui.html から始めます。load.html に移動するボタンをクリックします。load.html は Scripts\gui.vbs のスクリプトを使用します。関数の 1 つがデータベースをロードするため、データベースの場所を指定します: 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 時 2 分 EDT):

現在の作業ディレクトリを印刷したり、実行中のスクリプトからの相対パスだと思っていたものに基づいてファイルを取得したりするさまざまな試みにより、実行されたスクリプトのパスではなく、デスクトップのパスが表示されました。このリンクに出くわしました: http://leereid.wordpress.com/2008/03/19/vbscript-current-directory-or-folder/ しかし、実行時エラーが発生するため、どのソリューションも機能していません。 Wscript オブジェクト。したがって、前述のリンクのソリューションのいずれかが異なる結果をもたらすかどうかはわかりませんが、誰かがそれらの少なくとも1つを機能させるのを手伝ってくれれば、それが正しい方向への一歩である可能性があることがわかります.

以下に再現されたソリューションの1つ:

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 に答える