Подтвердить что ты не робот

Получение текущего каталога в 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

Как мне на самом деле настроить этот код, чтобы он делал то, что я хочу, чтобы он делал правильно?

4b9b3361

Ответ 1

Вы можете использовать WScript.ScriptFullName, который вернет полный путь к выполнению script.


Затем вы можете использовать строковое манипулирование (пример jscript):

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


Или получить помощь от FileSystemObject, (пример vbscript):

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

Ответ 2

Вы можете использовать свойство CurrentDirectory.

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

Ответ 3

Ваша проблема не в получении каталога (fso.GetAbsolutePathName(".") разрешает текущий рабочий каталог просто отлично). Даже если вам нужен каталог сценариев вместо текущего рабочего каталога, вы можете легко определить это, как описал Якоб Штернберг в своем ответе.

Что не работает в вашем коде, так это создание пути из каталога и вашего исполняемого файла. Это неверный синтаксис:

Directory = CurrentDirectory\attribute.exe

Если вы хотите построить путь из переменной и имени файла, имя файла должно быть указано в виде строки (или переменной, содержащей строку) и объединено с переменной переменной каталога:

Directory = CurrentDirectory & "\attribute.exe"

или (лучше) вы строите путь с помощью метода BuildPath :

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

Ответ 4

Ваша строка

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

Ответ 5

'-----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

просто:

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

Ответ 7

Использование с... Конец с оператором

Пример с… Конец оператором

''''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