私は現在のディレクトリを取得し、ファイルがどこに置かれていても、パスがどのように変更されていても、それを使用してアプリケーションを実行しようとしています
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
このコードを実際に設定して、正しく実行したいことを行うにはどうすればよいですか?
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)
CurrentDirectory プロパティを使用できます。
Dim WshShell, strCurDir
Set WshShell = CreateObject("WScript.Shell")
strCurDir = WshShell.CurrentDirectory
WshShell.Run strCurDir & "\attribute.exe", 0
Set WshShell = Nothing
問題はディレクトリを取得していないことです(fso.GetAbsolutePathName(".")
は現在の作業ディレクトリを問題なく解決します)。現在の作業ディレクトリではなくスクリプトディレクトリが必要な場合でも、Jakob Sternbergが his answer で説明しているように、簡単に判断できます。
コードで機能しないのは、ディレクトリと実行可能ファイルからパスを作成することです。これは無効な構文です:
Directory =
CurrentDirectory\attribute.exe
変数とファイル名からパスを作成する場合、ファイル名を文字列(または文字列を含む変数)として指定し、変数ディレクトリ変数と連結する必要があります。
Directory = CurrentDirectory & "\attribute.exe"
または(より良い) BuildPath メソッドを使用してパスを構築します:
Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
あなたのライン
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
'-----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
シンプル:
scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
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