web-dev-qa-db-ja.com

VBScriptで現在のディレクトリを取得する

私は現在のディレクトリを取得し、ファイルがどこに置かれていても、パスがどのように変更されていても、それを使用してアプリケーションを実行しようとしています

Dim fso: set fso = CreateObject("Scripting.FileSystemObject")
Dim CurrentDirectory
CurrentDirectory = fso.GetAbsolutePathName(".")
Dim Directory
Directory = CurrentDirectory\attribute.exe

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "Directory" & Chr(34), 0
Set WinScriptHost = Nothing

このコードを実際に設定して、正しく実行したいことを行うにはどうすればよいですか?

37
CodeKeyer

WScript.ScriptFullNameを使用して、実行スクリプトのフルパスを返すことができます。


その後、文字列操作(jscript example)を使用できます。

scriptdir = WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf(WScript.ScriptName)-1)


またはFileSystemObjectからヘルプを取得、(vbscript example):

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
39
Jakob Sternberg

CurrentDirectory プロパティを使用できます。

Dim WshShell, strCurDir
Set WshShell = CreateObject("WScript.Shell")
strCurDir    = WshShell.CurrentDirectory
WshShell.Run strCurDir & "\attribute.exe", 0
Set WshShell = Nothing
27

問題はディレクトリを取得していないことです(fso.GetAbsolutePathName(".")は現在の作業ディレクトリを問題なく解決します)。現在の作業ディレクトリではなくスクリプトディレクトリが必要な場合でも、Jakob Sternbergが his answer で説明しているように、簡単に判断できます。

コードで機能しないのは、ディレクトリと実行可能ファイルからパスを作成することです。これは無効な構文です:

Directory = CurrentDirectory\attribute.exe

変数とファイル名からパスを作成する場合、ファイル名を文字列(または文字列を含む変数)として指定し、変数ディレクトリ変数と連結する必要があります。

Directory = CurrentDirectory & "\attribute.exe"

または(より良い) BuildPath メソッドを使用してパスを構築します:

Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
24
Ansgar Wiechers

あなたのライン

Directory = CurrentDirectory\attribute.exe

vbscriptの取扱説明書で出会ったどの機能とも一致しません。以下は私にとってはうまくいきますが、「attribute.exe」が何をどこにあると予想されるかわかりません。

dim fso
dim curDir
dim WinScriptHost
set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
set fso = nothing
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run curDir & "\testme.bat", 1
set WinScriptHost = nothing
6
Les Ferguson
'-----Implementation of VB6 App object in VBScript-----
Class clsApplication
    Property Get Path()
          Dim sTmp
          If IsObject(Server) Then
               'Classic ASP
               Path = Server.MapPath("../")
          ElseIf IsObject(WScript) Then 
               'Windows Scripting Host
               Path = Left(WScript.ScriptFullName, InStr(WScript.ScriptFullName, WScript.ScriptName) - 2)
          ElseIf IsObject(window) Then
               'Internet Explorer HTML Application (HTA)
               sTmp = Replace( Replace(Unescape(window.location), "file:///", "") ,"/", "\")
               Path = Left(sTmp, InstrRev( sTmp , "\") - 1)
          End If
    End Property
End Class
Dim App : Set App = New clsApplication 'use as App.Path
6
sevenfold

シンプル:

scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
1
user3063731

With…End Withステートメントの使用

With With ... End Withステートメント

''''Way 1
currentdir=Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))


''''Way 2

With CreateObject("WScript.Shell")
CurrentPath=.CurrentDirectory
End With


''''Way 3

With WSH
CurrentDirr=Replace(.ScriptFullName,.ScriptName,"")
End With
1
scientist_7