在vbscript中获取当前目录

Cod*_*yer 40 directory 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
Run Code Online (Sandbox Code Playgroud)

我如何实际设置此代码,以便它做我想要它正确做的事情?提前致谢!

Jak*_*erg 42

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


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

scriptdir = WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf(WScript.ScriptName)-1)
Run Code Online (Sandbox Code Playgroud)


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

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
Run Code Online (Sandbox Code Playgroud)

  • 第一个示例需要一个小修正:WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf(WScript.ScriptName) - 1) (2认同)

Pan*_*lov 29

您可以使用CurrentDirectory属性.

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

  • 注意:这将返回执行脚本的目录,而不是脚本本身的目录. (5认同)
  • 例如,如果将文件拖放到运行脚本的bat文件上,则workingdir将是该文件的目录. (3认同)

Ans*_*ers 24

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

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

Directory = CurrentDirectory\attribute.exe
Run Code Online (Sandbox Code Playgroud)

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

Directory = CurrentDirectory & "\attribute.exe"
Run Code Online (Sandbox Code Playgroud)

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

Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
Run Code Online (Sandbox Code Playgroud)

  • @sirdank我不知道你在谈论什么属性,因为我的答案中没有提及.小心解释一下? (2认同)

小智 6

你的路线

Directory = CurrentDirectory\attribute.exe
Run Code Online (Sandbox Code Playgroud)

与我在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
Run Code Online (Sandbox Code Playgroud)


sev*_*old 6

'-----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
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你做过什么吗?(给一个人一条鱼 - 喂他一天,教一个人钓鱼 - 喂他一辈子.) (2认同)
  • VBScript在几种不同的环境中使用(例如Classic ASP,Windows Scripting Host,HTML Application(通过IE)).这段代码将创建一个带有"Path"属性的对象"App".如果你坚持使用脚本,你可以在代码中使用"App.Path",就像在VB6中一样.("把一个男人变成火,他会温暖一天.让一个人着火,他将在余生中保持温暖.") (2认同)