53

我正在尝试获取当前目录并使用它来运行应用程序,无论文件放在哪里,也无论路径如何更改

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

我如何实际设置此代码以使其正确执行我希望它执行的操作?

4

7 回答 7

56

您可以使用WScript.ScriptFullName它将返回执行脚本的完整路径。


然后您可以使用字符串操作(jscript 示例):

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


或从 FileSystemObject 获得帮助,(vbscript 示例):

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
于 2014-01-20T02:42:58.177 回答
30

您可以使用CurrentDirectory属性。

Dim WshShell, strCurDir
Set WshShell = CreateObject("WScript.Shell")
strCurDir    = WshShell.CurrentDirectory
WshShell.Run strCurDir & "\attribute.exe", 0
Set WshShell = Nothing
于 2013-04-22T11:13:02.573 回答
25

您的问题是没有获取目录(fso.GetAbsolutePathName(".")很好地解决了当前工作目录)。即使您想要脚本目录而不是当前工作目录,您也可以很容易地确定,正如 Jakob Sternberg 在他的回答中所描述的那样。

在您的代码中不起作用的是从目录和可执行文件构建路径。这是无效的语法:

Directory = CurrentDirectory\attribute.exe

如果要从变量和文件名构建路径,则文件名必须指定为字符串(或包含字符串的变量)并与变量目录变量连接:

Directory = CurrentDirectory & "\attribute.exe"

或者(更好)您使用BuildPath方法构造路径:

Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
于 2013-04-22T09:14:30.893 回答
7
'-----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
于 2014-02-12T16:33:03.363 回答
6

你的线

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
于 2013-04-22T03:38:48.097 回答
3

在代码中使用With 。

试试这种方式:

''''Way 1

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


''''Way 2

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


''''Way 3

With WSH
CD=Replace(.ScriptFullName,.ScriptName,"")
End With
于 2019-05-30T17:24:41.013 回答
1

简单的:

scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
于 2017-11-15T17:30:21.963 回答