Получение текущего каталога в 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
Как мне на самом деле настроить этот код, чтобы он делал то, что я хочу, чтобы он делал правильно?
Ответы
Ответ 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