如何确定正在运行脚本的文件夹的路径?
1个回答
展开全部
-- PD 答: 您好,PD。您知道,对于脚本专家,此问题(同我们所收到的许多问题一样)被我们归到了“为什么我们没有想到”类别之下。脚本专家将花费大量的时间测试脚本,包括由 Windows 脚本编写社区成员所提交的脚本。(嗯,将会有一位脚本专家花费大量时间测试众多脚本。请注意,即使他必须做这里几乎所有的工作,他也不会抱怨。[编者注:包括大多数抱怨。])其中的许多脚本将向某个文件夹添加文件或从该文件夹删除文件,或者将信息写入该文件夹中的日志文件(该脚本本身就在该文件夹中)。这意味着我们经常需要使用 Windows 资源管理器打开脚本的主文件夹。我们如何打开该文件夹呢?嗯,双击我的电脑、双击 C:、双击 Scripts 等等。我们从来没有想过使用脚本来为我们打开文件夹。
Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
strPath = "explorer.exe /e," & strFolder
objShell.Run strPath
正如您所看到的,这个脚本不是特别复杂。首先创建一个 Wscript.Shell 对象的实例;稍后会使用这个对象启动 Windows 资源管理器。然后使用下面这行代码获取运行脚本的完整路径(例如 C:\Scripts\My_script.vbs):
strPath = Wscript.ScriptFullName
进行下一步之前,要马上澄清一下。有些人可能想知道我们为什么不使用 CurrentDirectory 属性来确定脚本的当前目录。本来可以,但有一个问题:脚本的当前目录与其运行时所在的文件夹不一定相同。毕竟,您可以轻松地启动 C:\Scripts 中的一个脚本,然后将当前目录更改为 C:\Test。对于此专栏,我们需要脚本所驻留的文件夹的名称。如果您更愿意获取当前目录,则请使用下面的这个脚本:
Set objShell = CreateObject("Wscript.Shell")
strPath = objShell.CurrentDirectory
strPath = "explorer.exe /e," & strPath
objShell.Run strPath
现在,回到我们的原始脚本。将脚本的完整路径存储到变量 strPath 中之后,我们会创建 Scripting.FileSystemObject 的实例。接下来我们将使用以下两行代码:
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
此时,我们已拥有此脚本文件本身的路径:C:\Scripts\My_script.vbs。很好,但我们真正需要的是去掉文件名而仅保留文件夹路径:C:\Scripts。尽管有几种不同的方法可以达到此目的,但是我们认为下面的方法最为简单。此时我们所要做的是使用 GetFile 方法绑定到文件 C:\Scripts\My_script.vbs(请注意我们是如何将变量 strPath 作为单独的参数传递给 GetFile 的)。连接到该文件之后,我们便可以使用 GetParentFolderName 方法获取文件所驻留的文件夹的完整路径;不用说,它恰好是 C:\Scripts。这也恰好是我们想要打开的那个文件夹。
剩下的就很容易了。在将脚本文件夹路径安全地放到变量 strPath 中之后,我们便可使用下面这行代码来构造一个命令行字符串,该字符串将打开 Windows 资源管理器窗口(该窗口的焦点设置为 C:\Scripts):
strPath = "explorer.exe /e," & strPath 现在,剩余的全部工作就是调用 Run 方法,以传递我们刚刚构造的命令行字符串:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询