我正在尝试获取当前目录并使用它来运行应用程序,无论文件放在哪里以及路径如何更改
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,它返回 执行脚本的完整路径。
然后您可以使用字符串操作或 FileSystemObject 来获取父路径。两种方法都会返回所需的结果,唯一的区别是如果路径不存在,FileSystemObject 将抛出错误。 ..并且意识到可能的错误是一件好事;)
VBScript
' VBscript string manipulation
scriptDir = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\") - 1)
' VBscript FileSystemObject
scriptDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
JScript 版本:
// JScript string manipulation
var scriptdir = WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf("\\"))
// JScript using FileSystemObject
scriptDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
这就是您所需要的;)
不要使用 fso.GetAbsolutePathName(".") 或 wShell.CurrentDirectory
使用它们的问题是它们都返回当前的
working directory
。是的,如果您只需双击该文件,它就可以正常工作,但如果从其他位置调用该文件,那么工作目录很可能是其他目录。
如果您在控制台中执行此操作:
C:\Users>cscript //nologo "C:\myscripts\cool.vbs"
那么你的工作目录将是
C:\Users
如果将文件拖放到 vbs 文件上(使用文件参数在 WScript 中启动脚本),则工作目录将为
C:\Windows\System32
(即使拖放的文件与 vbs 脚本位于同一目录中。)
我希望这有帮助。
您可以使用 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 在他的答案中所述。
在您的代码中不起作用的是从目录和可执行文件构建路径。这是无效语法:
Directory =
CurrentDirectory\attribute.exe
如果要从变量和文件名构建路径,则必须将文件名指定为字符串(或包含字符串的变量)并与变量目录变量连接:
Directory = CurrentDirectory & "\attribute.exe"
或者(更好)您使用 BuildPath 方法构造路径:
Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
'-----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
你的线路
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
在代码中使用 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
简单:
scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
2个最简单的方法:
Replace(WScript.ScriptFullName, WScript.ScriptName, "")
Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
wscript.echo Mid(WScript.ScriptFullName,1,InStrRev(WScript.ScriptFullName, "\"))